我是一个使用JavaScript的新手,我遇到了构造函数的问题,我的问题是我无法用新的函数覆盖旧函数的属性!
以下是我的代码:
function myFun() {
this.anotherFun = function() {
return true;
}
}
var myVar = new myFun();
console.log(myVar.anotherFun()); // returns 'true' as expected;
myFun.prototype.anotherFun = function() {
return false;
}
console.log(myVar.anotherFun()); // is returns 'true' why not 'false'?

答案 0 :(得分:3)
因为当原型链中多次出现相同的属性时,使用最接近的属性是有意义的。
您的实例有自己的属性,因此您无法通过添加继承属性来覆盖它。
您可能不想将myFun
添加为自己的属性
function myFun(){}
myFun.prototype.anotherFun = function(){return true};
var myVar = new myFun();
console.log(myVar.anotherFun()); // true
myFun.prototype.anotherFun = function(){return false};
console.log(myVar.anotherFun()); // false
答案 1 :(得分:1)
您尝试执行的操作将无法使用您的代码,因为在原型属性之前始终会查找自己的属性,因此您对原型属性所做的更改将没有明显的效果。为了使其工作,您可以将代码更改为始终使用原型属性:
function myFun(){}
myFun.prototype.anotherFun = function(){return true;}
var myVar=new myFun();
console.log(myVar.anotherFun()); // returns 'true' as expected;
myFun.prototype.anotherFun=function(){return false;}
console.log(myVar.anotherFun()); // now returns 'false' as expected

如果您想了解有关此主题的更多信息,请查看this Question。