避免重写原型时constructor属性的指向错误

在整个替换构造函数的prototype值时,会发生对象的constructor属性执行了Object,而非构造函数。
通常的修正方法有以下两种:

1
2
3
4
5
6
7
8
9
10
11
var Foo = function(){};
Foo.prototype = {
name : "foo",
bar : function(){
console.log(this.name);
}
};
// 修正替换Foo.prototype后导致construtor指向错误
Foo.prototype.constructor = Foo;

或者使用一个闭包的方式,局部更新prototype

1
2
3
4
5
6
(function(p){
p.name = "foo";
p.bar = function(){
console.log(p.name);
}
})(Foo.prototype);
0%