覆盖原型属性或功能

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已被覆盖,所以如何重写构造函数或属性。 我知道优先考虑构造函数变量,那么为什么需要在原型内定义函数或属性?


在原型上定义函数的原因是它可以在所有实例之间共享。 这将为您节省一些内存,而不是每个实例都拥有自己的构造函数中定义的函数副本。

您可能感兴趣的其他一些参考资料:

Javascript何时使用原型

http://javascript.crockford.com/inheritance.html


这是设计。 如果您希望它返回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
链接地址: http://www.djcxy.com/p/77719.html

上一篇: overriding prototype property or function

下一篇: C++: Strange "is private" error