prototype、proto和constructor的关系:
function Foo(){};
Foo.prototype.a = 1;
var f1 = new Foo;
instanceof
运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
构造函数:
用来初始化新创建的对象的函数是构造函数。在例子中,Foo()函数是构造函数
实例对象
通过构造函数的new操作创建的对象是实例对象。(如f1)
原型对象及prototype:
function Foo(){};
Foo.prototype.a = 1;
构造函数有一个prototype属性,指向函数的原型对象。通过同一个构造函数实例化的多个对象具有相同的原型对象。经常使用原型对象来实现继承
constructor
所有的原型对象都会自动获得一个 constructor(构造函数)属性,这个属性(是一个指针)指向 prototype 属性所在的函数(Foo)
由于实例对象可以继承原型对象的属性,所以实例对象也拥有constructor属性,同样指向原型对象对应的构造函数
f1.constructor === Foo
proto:
实例对象有一个proto属性,指向该实例对象对应的原型对象
f1.proto === Foo.prototype
*【1】函数(Function也是函数)是new Function的结果,所以函数可以作为实例对象,其构造函数是Function(),原型对象是Function.prototype
【2】对象(函数也是对象)是new Object的结果,所以对象可以作为实例对象,其构造函数是Object(),原型对象是Object.prototype
【3】Object.prototype的原型对象是null*
网友评论