恐怖代码:
var namespace = new function ()
{
this.saySomething = new function( something )
{
console.log( something );
};
}
namespace.saySomething( "whatever" );
当我期望它输出“任何”时,它会输出“未定义”。怎么会?解决办法是什么?我的目标无非是拥有一个命名空间,我可以在其中放置一些辅助函数。
恐怖代码:
var namespace = new function ()
{
this.saySomething = new function( something )
{
console.log( something );
};
}
namespace.saySomething( "whatever" );
当我期望它输出“任何”时,它会输出“未定义”。怎么会?解决办法是什么?我的目标无非是拥有一个命名空间,我可以在其中放置一些辅助函数。
new function
通常是不稳定的。Rob W 的回答是绝对正确的(+1'd),但我个人会更进一步并删除所有new
ing:
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!");
...尽管您确实说过“单身”,所以我猜这与您的目标无关。
删除new
之前function(something){...}
。目前,saySomething
是匿名构造函数的一个实例。
您不需要new
在函数之前使用。new
仅在已定义构造函数时用于实例化对象。
您的代码应如下所示:
var namespace = {
saySomething: function(something) {
console.log(something);
}
}
namespace.saySomething("whatever");
我会使用类似以下的内容,因为您还想确保命名空间不会被其他代码覆盖。
var namespace = (function() {
return {
saySomething: function(something) {
console.log(something);
}
};
})();
namespace.saySomething("whatever");
应该这样做,示例http://jsfiddle.net/Jssxy/
var namespace = {
saySomething : function(something) {
console.log(something);
}
}
namespace.saySomething( "whatever" );