对于javascript中的原型的理解,今天又复习了一下:
我们先看看《javascript高级程序程序设计3》对原型的讲解
先看示例:
function Person(){}
Person.prototype.name="Nicholas";
Person.prototype.age=29;
Person.prototype.sayName=function(){
alert(this.name);
}
var person1 = new Person();
person1.sayName();
var person2 = new Person();
person2.sayName();
书中写到:
下面是书中对Person()构造函数和Perons.prototype,实例之间的关系图:
下面两张图是我自己对原型的理解:
有了这些图片,应该对javascript的原型有了更好的理解
只要创建一个新的函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向了函数的原型对象,在默认的情况下所有原型都会自动获得一个constructor属性,这个属性包含一个指向prototype属性所在函数的指针。Person.prototype.constructor指向Person这个构造函数。
创建自定义的构造函数后,其原型对象默认只会获取constructor属性,其他属性都是从Object继承下来的,当调用构造函数创建一个新的实例后,该实例内部包含一个指针(内部属性),指向函数的原型对象,ECMA-262第5版中叫这个指针为[[Prototype]],在脚本中没有标志的访问方式,但是在Firefox,safari,Chrome中都支持一个属性__proto__
下面是书中对Person()构造函数和Perons.prototype,实例之间的关系图:
下面两张图是我自己对原型的理解:
有了这些图片,应该对javascript的原型有了更好的理解