我对Javascript在原型,变量声明和构造函数方面的行为有疑问。
为什么会这样:
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(…)
答案:以下答案显示,在第二种情况下,我们未使用var myFunction
关键字初始化function
;相反,我们只返回一个名为method
的属性的JSON对象,这在执行var obj = new myFunction();
时会导致错误。
答案 0 :(得分:2)
不,这与吊装无关。如果我们剥离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