作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于 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/
我是一名优秀的程序员,十分优秀!