Javascript 重写原型属性或函数

Javascript 重写原型属性或函数,javascript,constructor,overriding,prototype,Javascript,Constructor,Overriding,Prototype,现在日志显示我是真的。这意味着Ninja.prototype中定义的SwingWord已被重写,因此如何重写构造函数或属性。?? 我知道优先考虑构造函数变量,那么为什么需要在原型中定义函数或属性呢?这是设计的结果。如果希望构造函数返回false,请不要在构造函数中设置该值 您还可以创建一个setter方法: function Ninja(){ this.swingSword = function(){ return true; }; } // Should return fal

现在日志显示我是真的。这意味着Ninja.prototype中定义的SwingWord已被重写,因此如何重写构造函数或属性。??
我知道优先考虑构造函数变量,那么为什么需要在原型中定义函数或属性呢?

这是设计的结果。如果希望构造函数返回false,请不要在构造函数中设置该值

您还可以创建一个setter方法:

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." );

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

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


自有属性具有优先权,这就是原型链的工作方式。查看唯一的冒险是保存memoray oki,但如何操作构造函数值或函数要更改在构造函数中设置的实例变量值,可以使用
this
引用它。因此,如果您设置了类似于this.shouldSwingSword=true的内容在您的函数中。然后,你会做一些检查,比如检查ninja.shouldSwingSword是否应该是ninja.shouldSwingSword。不过,您可能不需要将函数放入构造函数中。这些通常应该放在原型上,或者只放在类对象本身(即静态方法)上,您也可以直接在任何函数外部更改值:
ninja.shouldSwingSword=false。这就是你要问的吗?
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