原型
主题
什么是原型?
原型是一个对象,其他对象可以通过它实现属性继承。
哪些对象有原型?
所有的对象在默认的情况下都有一个原型,因为原型本身也是对象,所以每个原型自身又有一个原型(只有一种例外,默认的对象原型在原型链的顶端。更多关于原型链的将在后面介绍)
什么是对象?
在javascript中,一个对象就是任何无序键值对的集合,如果它不是一个主数据类型(undefined,null,boolean,number,or string),那它就是一个对象。
一个对象的真正原型是被对象内部的[[Prototype]]属性(property)所持有。ECMA引入了标准对象原型访问器Object.getPrototype(object),到目前为止只有Firefox和chrome实现了此访问器。除了IE,其他的浏览器支持非标准的访问器proto
当你试图获取一个主数据类型的原型时,它被强制转化成了一个对象。 false.proto === Boolean(false).proto; //true
var b = function(){ var one; }
var c = new b();
b.constructor == Function.constructor;
b.proto == Function.prototype;
c.proto == b.prototype; // c.proto是一个对b.prototype 的一个引用。
b.prototype.max = 3;
c.max //3
a.proto是一个对A.prototype 的一个引用。
var A = function(name) {
this.name = name;
}
var a = new A('alpha');
a.name; //'alpha'
A.prototype.x = 23;
a.x; //23
实例对象a的原型(a.proto)是对函数A的原型属性(A.prototype)的引用,所以如果修改的是A的原型属性,