Javascript简单对象中奇怪的构造?

时间:2011-12-10 09:29:36

标签: javascript

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行:}; ---缺少'()'调用构造函数。

代码工作正常。

我做错了什么?

3 个答案:

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