乐趣区

关于javascript:prototypeproto和constructor的关系

实际上起源就两行代码

function Foo(){};
var f1 = new Foo;
【构造函数】

用来初始化新创建的对象的函数是构造函数。在例子中,Foo()函数是构造函数

【实例对象】

通过构造函数的 new 操作创立的对象是实例对象。能够用一个构造函数,结构多个实例对象

function Foo(){};
var f1 = new Foo;
var f2 = new Foo;
console.log(f1 === f2);//false
【原型对象及 prototype】

构造函数有一个 prototype 属性,指向实例对象的原型对象。通过同一个构造函数实例化的多个对象具备雷同的原型对象。常常应用原型对象来实现继承

复制代码
复制代码
function Foo(){};
Foo.prototype.a = 1;
var f1 = new Foo;
var f2 = new Foo;

console.log(Foo.prototype.a);//1
console.log(f1.a);//1
console.log(f2.a);//1
复制代码
复制代码
【constructor】

原型对象有一个 constructor 属性,指向该原型对象对应的构造函数

function Foo(){};
console.log(Foo.prototype.constructor === Foo);//true
因为实例对象能够继承原型对象的属性,所以实例对象也领有 constructor 属性,同样指向原型对象对应的构造函数

function Foo(){};
var f1 = new Foo;
console.log(f1.constructor === Foo);//true
【proto】

实例对象有一个 proto 属性,指向该实例对象对应的原型对象

function Foo(){};
var f1 = new Foo;
console.log(f1.__proto__ === Foo.prototype);//true

退出移动版