关于constructor指向问题:
无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,默认情况下prototype属性会默认获得一个constructor(构造函数)属性,这个属性是一个指向prototype属性所在函数的指针,说的有些绕了,上代码:
var superClass = function(){
this.num = 2;
}
superClass.prototype.show = function(){
console.log(this.name);
}
var F1 = function(){};
console.log(F1.prototype.constructor);//function (){}
F1.prototype = new superClass();
console.log(F1.prototype.constructor);//function (){this.num = 2;}
1赞 · 3采集
qq_珂壳可克_03751673
2017-08-18
F.prototype = superClass.prototype 和 F.prototype = new superClass();的区别:
前者F仅仅继承superClass的方法,而构造函数里的属性不会继承,后者则是把属性和prototype的方法也一并继承了,
代码验证:
var superClass = function(){
this.num = 2;
}
superClass.prototype.show = function(){
console.log(this.name);
}
var F1 = function(){};
var F2 = function(){};
F1.prototype = new superClass();
F2.prototype = superClass.prototype;
var f = new F1();
var f2 = new F2();
f.show();//2
f2.show();//undefined