【问题标题】:Javascript Weird construction in simple object?简单对象中的 Javascript 奇怪构造?
【发布时间】:2023-04-05 06:14:01
【问题描述】:

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 红线波纹管告诉我:

第 1 行:var t = new function () --- 奇怪的构造。删除“新”。

第 16 行:}; --- 缺少调用构造函数的 '()'。

代码运行良好。

我做错了什么?

【问题讨论】:

  • 在我的 Firefox/Chrome 中运行良好。您在哪个浏览器上遇到问题?
  • @Munim jsBin 红线波纹管.....我已编辑。看看链接。谢谢。
  • @Munim 它正在处理两个警告。
  • @Hristo 你到底是怎么找到这个的??? :) 谢谢,我会看看的。

标签: javascript


【解决方案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();

【讨论】:

  • 我也可以这样做....但是我的代码在语法上很好。我看不出它不起作用的任何原因....
  • 从技术上讲,var t = new function()... 没有任何问题,但没有充分的理由这样做。因此 weird 构造函数。
【解决方案2】:

如果你要写一个“匿名类型”相当于:

var _anonymous_type = function () {
    ...
}

var t = new _anonymous_type();

你应该:

var t = new (function () {
    ...
})();

看到你的代码的不同了吗? :)

【讨论】:

  • 第二个只是第一个的内联......为什么会被认为是错误的?
  • @Jeffrey Zhao 我收到了与您的新建议相同的警告(没有双关语)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2017-04-24
  • 2013-09-05
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
相关资源
最近更新 更多