gpt4 book ai didi

javascript - 为什么我会收到此类型错误 : instance vs prototype

转载 作者:行者123 更新时间:2023-11-28 08:20:34 26 4
gpt4 key购买 nike

嗨,我正在尝试了解 .prototype 和普通实例之间的区别或发生的情况。谁能解释一下,为什么这段代码不起作用?我收到类型错误:“未定义不是函数”。我只是想看看 Ninja() 类和 .prototype 以及第一个实例之间发生了什么。然后我试图看看当我创建一个名为 ninja 的新 Ninja() 类时会发生什么。并重复

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

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

var ninja = new Ninja;
console.log(Ninja.prototype.swingSword());
console.log(Ninja.swingSword());
console.log(ninja.swingSword());
console.log(ninja.prototype.swingSword());

最佳答案

prototypeFunction 对象的属性,并且由于所有函数对象都继承自 Function,因此它们都具有该属性。在您的情况下, Ninja 是一个函数,但 ninja 只是由 Ninja 构造的对象,因此它没有 prototype 。由于它没有prototype,JavaScript 返回undefined。并且您尝试在 undefined 上调用 swingSword,这是不可能的。这就是您收到该错误的原因。

你可以这样检查

console.log({}.toString.call(Ninja));
# [object Function]
console.log({}.toString.call(ninja));
# [object Object]
console.log(Ninja.prototype);
# { swingSword: [Function] }
console.log(ninja.prototype);
# undefined

另请注意,您仅在 Ninja.prototype 上定义了 swingSword,而不是在 Ninja 上定义。当您调用 Ninja.swingSowrd() 时,JavaScript 将首先在 Ninja 中查找它,然后在其父级原型(prototype)中查找,即 Function.prototype 。对 Ninja 的查找不会涉及 Ninja.prototype。也就是说,您在该行上也遇到了错误。

关于javascript - 为什么我会收到此类型错误 : instance vs prototype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23026769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com