我无法在构造函数中更改属性

时间:2016-07-01 17:55:38

标签: javascript constructor properties prototype

我是一个使用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'?




2 个答案:

答案 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