http://jsbin.com/ufihev/3/edit
非常简单的代码:
var t = new function () //line 1
{
this.a1 = function () {
return function () {
alert("1");
};
}();
this.a2 = function () {
alert("a2");
};
}; //line 16
t.a1();
但 jsBin red line bellow 告诉我:
第1行:var t = new function()---奇怪的构造。删除“新”。
第16行:}; ---缺少'()'调用构造函数。
代码工作正常。
我做错了什么?
答案 0 :(得分:2)
如果您要写一个"匿名类型"相当于:
var _anonymous_type = function () {
...
}
var t = new _anonymous_type();
你应该:
var t = new (function () {
...
})();
查看与您的代码的区别? :)
答案 1 :(得分:1)
试试这个:
var t = function () //line 1
{
this.a1 = function () {
return function () {
alert("1");
};
}();
this.a2 = function () {
alert("a2");
};
}; //line 16
var x = new t();
x.a1();
答案 2 :(得分:0)
之所以怪异的构造,是因为您试图创建匿名类/函数的实例。
匿名类并未得到广泛使用,因为类通常比匿名函数更复杂,并且不应操纵其定义。
此外,如果省略new
,它将执行与函数(而不是类)相同的代码。
var x = function(){
console.log("I am a function/instance of a class");
}();
// same as ...
var x = new function(){
console.log("I am a function/instance of a class");
}();
匿名函数更直接,因此可以接受。因此,“删除new
”。