JavaScript学习笔记(二)原型

JavaScript不包含传统的类继承模型,而是使用prototype原型模型。JavaScript使用原型链的继承方式。

function Foo() {
     this.value = 42;
}

Foo.prototype = {
     method: function() {}
};

function Bar() {}

//设置Bar的prototype属性为Foo的实例对象
Bar.prototype = New Foo();
Bar.prototype.foo = ‘Hello World’;

//修正Bar.prototype.constructor为Bar本身 (原型构造函数)
Bar.prototype.constructor = Bar;

var test = new Bar()  //创建Bar的一个实例

//原型链
test [Bar 的实例]
     Bar.prototype [Foo的实例]
          {foo: ’Hello World'}
          Foo.prototype
               {method: ...}
               Object.prototype
                    {toString: …/* etc.*/}

上面的例子中,test对象从Bar.prototype和Foo.prototype继承下来,因此,它能访问Foo的原型方法method。同时,它也能够访问那个定义在原型上的Foo实例属性value。需要注意的是new Bar()不会创造出一个新的Foo实例,而是重复使用它原型上的那个实例;因此,所有的Bar实例都会共享相同的value属性。

以上有两点需要注意:
1、简单的使用Bar.prototype = Foo.prototype 将会导致两个对象共享相同的原型。因此,改变任意一个对象的原型都会影响到另一个对象的原型。
2、不要使用Bar.prototype = Foo,因为这不会执行Foo的原型,而是指向函数Foo。因此原型链将会回溯到Function.prototype而不是Foo.prototype,因此method将不会在Bar的原型链上。

属性查找:
当查找一个对象的属性时,JavaScript会向上遍历原型链,直到找到给定名称的属性为止。当查找到原型链的顶部-也就是Object.prototype-但是仍未找到指定的属性,就会返回undefined。

posted on 2016-03-22 16:08  理想笔记  阅读(131)  评论(0)    收藏  举报

导航

转载请注明出处