Prototype和TypeError:someFunction不是构造函数

时间:2017-03-21 14:51:55

标签: javascript

我对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();时会导致错误。

1 个答案:

答案 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