示例1:
function Cat(){
this.color = function (){
return "Green";
};
}
Cat.prototype.color = function(){
return "Blue";
}
var kitty = new Cat();
alert(kitty.color()); // Green
示例2:
function Cat(){
var color = function (){
return "Green";
};
}
Cat.prototype.color = function(){
return "Blue";
}
var kitty = new Cat();
alert(kitty.color()); // Blue
示例2返回Blue
,是因为构造函数无法覆盖公共成员,也无法访问私有成员?
答案 0 :(得分:0)
示例2对构造函数中的color
没有任何作用,因为它不是属性,而是其范围内的函数。例如1你应该意识到属性的查找以本地属性开始,如果没有找到,它继续原型属性。因此,在示例1的情况下,首先找到本地color
- 方法并执行。本地和原型方法是不同的方法,可以在以下方面证明:
function Cat(){
this.color = function (){
return Cat.prototype.color ? Cat.prototype.color() : "Green";
};
}
Cat.prototype.color = function(){
return "Blue";
}
var prrr = new Cat;
alert(prrr.color()); //=> Blue
所以从这个意义上说,你的问题的答案是:是的。但不是:
function Cat(){
this.color = function (){
return Cat.prototype.color ? Cat.prototype.color() : "Green";
};
}
Cat.prototype.color = function(){
if (this.color && !this.colorOverwritten) {
this.color = function(){return "Orange";};
this.colorOverwritten = true;
}
return "Blue";
}
var prrr = new Cat;
alert(prrr.color()); //=> Blue
alert(prrr.color()); //=> Orange