为什么不调用这个原型方法呢?

时间:2014-04-12 03:46:43

标签: javascript inheritance prototype prototypal-inheritance

我正在通过各种教程很快学习javascript,而我刚买了一本中高级书。我很快就意识到我其实什么都不知道。因此,我需要知道为什么这个原型方法不会返回新值,或者当我在函数Ninja()的第一个声明之外执行时,原型方法会发生什么。

...此返回不能返回属性' swingSword' 我有一个请求虽然抱歉。你能用复杂的语言告诉我说实例化,继承,异步或其他什么,还能用简单的英语吗?

function Ninja() {
    this.swingSword = function() {
        return true;
    };
}

Ninja.prototype.swingSword = function() {
    return false;
};

var ninja = new Ninja();
console.log(ninja.prototype.swingSword());, ///Edit "Calling the prototype method. Not the instance."

3 个答案:

答案 0 :(得分:0)

ninja.prototype.swingSword()无效,因为ninja.prototypeundefined。我认为你的意思是ninja.swingSword()

首先我们需要了解,JavaScript将首先在当前对象中查找属性。只有它找不到,才会进入原型链。

在这种情况下,由于您将swingSword添加到this(当前实例),因此当您调用ninja.swingSword()时,将执行当前实例中的swingSword。< / p>

答案 1 :(得分:0)

问题在于:ninja.prototype.swingSword()

Yous必须称之为:ninja.swingSword()

答案 2 :(得分:0)

如果你想显式调用prototype方法,我相信这就是语法:

var ninja = new Ninja();
console.log(Ninja.prototype.swingSword.call(ninja), "Calling the instance method, not the prototype method.");

所以原型并没有挂在ninja变量上。它悬挂在Ninja类型上。