/*
原型Prototype
*/
//一、原型
//原型使用一
var calculator = function (dlg, tax)
{
this.dlg = dlg;
this.tax = tax;
}
calculator.prototype = {
add: function (x, y) {
return x + y;
},
subtrac: function (x, y) {
return x - y;
}
}
//原型使用二
//封装私有函数
calculator.prototype = function () {
add = function (x, y) {
return x + y;
},
subtract = function (x, y) {
return x - y;
}
return {
add: add,
substract: subtract
}
}();
//分开设置原型的每个属性
calculator.prototype.add = function (x, y) { };
calculator.prototype.substract = function (x, y) { }; var cal = function () {
this.tax = 5;
};
cal.prototype = new calculator(); //cal的原型指向calculator的实例上,让cal继承两个函数
//无论创建多少个cal实例,都指向同一个对象
var newCal = new cal();
newCal.dlg;
//不想访问calculator的构造函数声明的属性值dlg
cal.prototype = calculator.prototype;
cal.dlg//报错
//重写原型
//覆盖前面的add方法
calculator.prototype.add = function (x, y) {
return x + y + this.tax;
};
var calc = new calculator();
calc.add(1, 1); //二、原型链
function Foo() {
this.value = 42;
}
Foo.prototype = {
method: function () { }
};
function bar() { }
bar.prototype = new Foo();
bar.prototype.foo = 'hello';
//?
bar.prototype.constructor = bar;
var test = new bar(); /*
原型链
test[bar实例]
bar.prototype [foo实例]
{foo:'hello'}
foo.prototype
{method:...};
Object.prototype
{toString:....}
*/
//属性查找
function foo() {
this.add = function (x, y) {
return x + y;
}
}
foo.prototype.add = function (x, y) {
return x + y + 10;
}
var f = new foo();
f.add(1, 2) //3, 先找自身属性,再往上找,直到object,如果没有,返回undefined. for in 效率问题 foo.prototype = 1;//错误,不能赋值原子类型的值 //hasOwnProperty函数,唯一一个处理属性不查找原型链的函数
Object.prototype.bar = -1;
var foo = { goo: undefined };
'bar' in foo //true,查找原型链
foo.hasOwnProperty('bar');//false 未查找原型链 foo.hasOwnProperty('goo');//true
//hasOwnProperty不受保护,可能会被非法占用命名,需要使用外部的hasOwnProperty来获取正确结果
var foo = { hasOwnProperty: function () { return false; }, bar: 'Here be dragons' }; foo.hasOwnProperty('bar'); // 总是返回 false
// 使用{}对象的 hasOwnProperty,并将其上下为设置为foo
var my = {};
my.hasOwnProperty.call(foo, 'bar');

原型prototype -- 深入理解javascript的更多相关文章

  1. 语法——原型prototype深入理解

    console.log('-----------------------------Object'); var obj = {}; console.log(obj.__proto__ === Obje ...

  2. 深入理解JavaScript系列

    转自http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 深入理解JavaScript系列(1):编写高质量JavaScript代码 ...

  3. 深入理解JavaScript系列(转自汤姆大叔)

    深入理解JavaScript系列文章,包括了原创,翻译,转载,整理等各类型文章,如果对你有用,请推荐支持一把,给大叔写作的动力. 深入理解JavaScript系列(1):编写高质量JavaScript ...

  4. [转]深入理解JavaScript系列

    文章转自:汤姆大叔-深入理解JavaScript系列文章 深入理解JavaScript系列文章,包括了原创,翻译,转载,整理等各类型文章,如果对你有用,请推荐支持一把,给大叔写作的动力. 深入理解Ja ...

  5. [转载]深入理解JavaScript系列 --汤姆大叔

    深入理解JavaScript系列文章,包括了原创,翻译,转载,整理等各类型文章,如果对你有用,请推荐支持一把,给大叔写作的动力. 深入理解JavaScript系列(1):编写高质量JavaScript ...

  6. 深入理解JavaScript系列(转载)

    深入理解JavaScript系列 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaSc ...

  7. 深入理解javascript原型和闭包(3)——prototype原型

    既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...

  8. 深入理解JavaScript原型:prototype,__proto__和constructor

    JavaScript语言的原型是前端开发者必须掌握的要点之一,但在使用原型时往往只关注了语法,其深层的原理并未理解透彻.本文结合笔者开发工作中遇到的问题详细讲解JavaScript原型的几个关键概念, ...

  9. 深入理解javascript原型和闭包(3)——prototype原型 (转载)

    深入理解javascript原型和闭包(3)——prototype原型   既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的 ...

随机推荐

  1. C#实现在CAD图纸中插入另一个DWG图块的代码

    C#实现在CAD图纸中插入另一个DWG图块的代码 PromptPointResult ppr = ed.GetPoint("请选择插入点:"); Point3d pt = ppr. ...

  2. 慎用memset();

    <span style="font-family: Arial, Helvetica, sans-serif;">void *(memset) (void *s,int ...

  3. ORACLE的分组统计之ROLLUP(一)

    Oracle 9i以后,扩展了group by 的功能,能够满足大部分多维数据的分析统计功能,主要表现: 1. rollup,cube,grouping sets 扩展group by字句提供了丰富的 ...

  4. Part 72 to 81 Talking about Dictionary and List collection in C#

    Part 72   What is dictionary in c# Part 73   What is dictionary in c# continued Part 74   List colle ...

  5. 实现百度外卖APP个人中心头像"浪"起来的动画效果

    让你的头像浪起来~~~~~ DEMO 地址:网页链接,点击下载 你需要知道的 CADisplayLink 简单的说就是一定时器,其根本利用刷帧和屏幕频率一样来重绘渲染页面. 其创建方式: [Objec ...

  6. jquery动态移除/增加onclick属性详解

     本文章给大家介绍利用jquery的removeAttr与attr事件来给a标签增加与删除onclick事件的具体操作方法,有需要了解的朋友可参考. 要实现效果:点击链接先去掉onclick属性,3秒 ...

  7. css笔记——关于css中写上charset “utf-8”

    当css文件中写上 charset "utf-8" 时需要将body和html的样式分开写 例如: html,body{margin:0;padding:0;font-family ...

  8. Connected_Component Labelling(联通区域标记算法) C++实现

    // Connected-Component Labelling.cpp : 定义控制台应用程序的入口点.//如有是使用,请务必注明引用出处网站:http://www.cnblogs.com/Amat ...

  9. VS默认环境设置

    VS2010的工具菜单-->导入导出设置-->重置所有设置

  10. Mysql 存储程序

    #1存储过程create procedure greeting() BEGIN # 77 = 16 FOR username + 60 for hostname + 1 for '@' DECLARE ...