1

恐怖代码:

var namespace = new function ()
{
    this.saySomething = new function( something )
    {
        console.log( something );
    };
}

namespace.saySomething( "whatever" );

当我期望它输出“任何”时,它会输出“未定义”。怎么会?解决办法是什么?我的目标无非是拥有一个命名空间,我可以在其中放置一些辅助函数。

4

5 回答 5

3

new function通常是不稳定的。Rob W 的回答是绝对正确的(+1'd),但我个人会更进一步并删除所有newing

var namespace = 
{
    saySomething: function( something )
    {
        console.log( something );
    }
}

namespace.saySomething( "whatever" );

如果您希望能够创建不同的实例,请以正确的方式进行

function Namespace() {}
Namespace.prototype.saySomething = function (something)
{
    console.log(something);
}

// Usage:
var foo = new Namespace();
foo.saySomething("Hallllooooo!");

...尽管您确实说过“单身”,所以我猜这与您的目标无关。

于 2012-04-26T19:51:23.150 回答
2

删除new之前function(something){...}。目前,saySomething是匿名构造函数的一个实例。

于 2012-04-26T19:48:34.153 回答
2

您不需要new在函数之前使用。new仅在已定义构造函数时用于实例化对象。

您的代码应如下所示:

var namespace = {
    saySomething: function(something) {
        console.log(something);
    }
}

namespace.saySomething("whatever");
于 2012-04-26T19:52:36.957 回答
1

我会使用类似以下的内容,因为您还想确保命名空间不会被其他代码覆盖。

var namespace = (function() {
      return {
          saySomething: function(something) {
               console.log(something);
          }
      };
})();

namespace.saySomething("whatever");
于 2012-04-29T21:08:57.213 回答
0

应该这样做,示例http://jsfiddle.net/Jssxy/

var namespace = {
    saySomething : function(something) {
        console.log(something);
    }
}

namespace.saySomething( "whatever" );​
于 2012-04-26T19:51:14.020 回答