构造函数的原型不能覆盖公共成员,这是真的吗?
Is it true constructor's prototype cannot overwrite public members?
示例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
相关文章:
- 为什么这是真的:parseInt(1111111111111,2)===parseInt(111111111111,2)
- (false==false==true)怎么可能是真的
- 为什么typeof的数组的数组的未定义值返回为“0”;未定义的“;我的条件不认为是真的
- Passport.js`isAuthenticated()`不一致的行为;当它应该是真的时候是假的
- 饶恕是真的就是假的
- Extjs form.reset() 不作为 trackResetOnLoad 工作是真的
- 为什么 1.2 == true 返回 false 如果布尔值 (1.2) 实际上是真的
- xmlHttp.status==200从来都不是真的
- 假设:Meteor.call()首先尝试在客户端环境中运行,这是真的吗
- 在学校项目中使用jquery插件是剽窃吗
- Java/JavaScript日期:这是真的吗
- 我应该使用其他东西而不是setTimeout吗
- 使用“GET”的客户端请求表单,即使定义了“POST”.javascript iframe是原因吗
- 在所有主流浏览器中,GIF动画和javascript在同一个线程上运行,这是真的吗?
- 对于JavaScript多维数组的深度拷贝,深入一层似乎就足够了.这是真的吗?
- 构造函数的原型不能覆盖公共成员,这是真的吗?
- 这句话会被认为是真的吗
- 如果(否定数)是真的?js 有问题吗?
- 为什么是'0 '是真的吗?Javascript(角)
- JavaScript中的每个函数都是闭包,这是真的吗?