恐怖守则:
var namespace = new function ()
{
this.saySomething = new function( something )
{
console.log( something );
};
}
namespace.saySomething( "whatever" );
当我预期输出“无论什么”时输出“undefined”。怎么会?那个修复是什么?我的目标只是拥有一个命名空间,我可以放置一些辅助函数。
答案 0 :(得分:3)
new function
is generally wonky. Rob W的答案是绝对正确的(+ 1),但我个人会更进一步remove all the new
ing:
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)
您不需要在功能之前使用new
。 new
仅用于在已定义构造函数时实例化对象。
您的代码应如下所示:
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" );