gpt4 book ai didi

javascript - 原型(prototype)和类型错误: someFunction is not a constructor

转载 作者:行者123 更新时间:2023-12-01 03:53:55 27 4
gpt4 key购买 nike

我有一个关于 Javascript 在原型(prototype)、变量声明和构造函数方面的行为的问题。

为什么这有效:

var myFunction = function(){ alert('something')};
myFunction.prototype = (function() {
var a='something else';
return {method:a}
} () );
var obj = new myFunction();
console.log(obj.method); // the message 'something else' is logged

然而这不起作用:

var myFunction = (function() { 
var a='something else';
return {method:a}
} () );
var obj = new myFunction();
console.log(obj.method);

它抛出:

Uncaught TypeError: myFunction is not a constructor(…)

答案:下面的答案表明,在第二种情况下,我们没有使用 function 关键字初始化 var myFunction ;相反,我们只返回一个带有名为 method 的属性的 JSON 对象,该对象在执行 var obj = new myFunction(); 时会导致错误。

最佳答案

不,这与提升无关。如果我们去掉 IIFE 和局部变量,你的第一个片段就会变成

var myFunction = function() {
alert('something');
};
myFunction.prototype = {
method: 'something else'
};
var obj = new myFunction();
console.log(obj.method);

而第二个变成了

var myFunction = {
method: 'something else'
};
var obj = new myFunction();
console.log(obj.method);

这显然是行不通的。

也许你想写

var obj = (function() { 
var a = 'something else';
return {method:a}
}());
console.log(obj.method); // the message 'something else' is logged

关于javascript - 原型(prototype)和类型错误: someFunction is not a constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42930554/

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