示例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
,是因为构造函数不能覆盖公共成员还是它不能访问私有成员?
例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