使用Javascript命名空间/ singleton不会接受传递给member方法的参数

时间:2012-04-26 19:46:51

标签: javascript function namespaces singleton arguments

恐怖守则:

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

namespace.saySomething( "whatever" );

当我预期输出“无论什么”时输出“undefined”。怎么会?那个修复是什么?我的目标只是拥有一个命名空间,我可以放置一些辅助函数。

5 个答案:

答案 0 :(得分:3)

new function is generally wonky. Rob W的答案是绝对正确的(+ 1),但我个人会更进一步remove all the newing

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

namespace.saySomething( "whatever" );

如果您希望能够创建不同的实例,do it the right way

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

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

...虽然你确实说过“单身人士”,但我猜这与你的目标无关。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

您的代码应如下所示:

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

namespace.saySomething("whatever");

答案 3 :(得分:1)

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

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

namespace.saySomething("whatever");

答案 4 :(得分:0)

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

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

namespace.saySomething( "whatever" );​