function Ninja(){
this.swingSword = function(){
return true;
};
}
// Should return false, but will be overridden
Ninja.prototype.swingSword = function(){
return false;
};
var ninja = new Ninja();
log( ninja.swingSword(), "Calling the instance method, not the prototype method." );
现在日志显示我是真的。这意味着在Ninja.prototype中定义的swingSword已被覆盖,因此如何覆盖构造函数或属性。 我知道首选的是构造函数变量,那么为什么需要在原型中定义一个函数或属性?
答案 0 :(得分:3)
在原型上定义函数的原因是它在所有实例之间共享。这将节省一些内存,而不是每个实例都有自己的构造函数中定义的函数副本。
您可能感兴趣的其他一些参考资料:
答案 1 :(得分:1)
这是设计的。如果希望它返回false,请不要在构造函数中设置该值。
你也可以制作一个setter方法:
function Ninja() {
var swordState = true;
this.swingSword = function () {
return swordState;
};
this.setSword = function (b) {
swordState = b;
};
}
// Should return false, but will be overridden
Ninja.prototype.swingSword = function () {
return false;
};
var ninja = new Ninja();
console.log(ninja.swingSword(), "Calling the instance method, not the prototype method.");
ninja.setSword(false);
console.log(ninja.swingSword()); // returns false