下面有什么区别:
function test(){
this.init=function(){//do something}
this.some=function(){//do something}
function other(){}
}
和
function test(){
function init(){//do something}
function some(){//do something}
function other(){}
return {'init':init, 'some':some};
}
感谢您的解释。
答案 0 :(得分:6)
第一个例子:
var object = new test();
object.init();
第二个例子:
var object = text(); // no new
object.init();
答案 1 :(得分:4)
正如迈克已经指出的那样,他们需要调用的方式有所不同(第一个版本需要new
而第二个版本不需要)。
也就是说,如果将它们用于实际模块(而不仅仅是对象)并且模块中的函数相互调用则会产生差异。
在第二种情况下,函数可以直接相互引用(静态绑定)。
function init(){
some(17);
}
但在第一种情况下,他们会通过this
:
this.init = function(){
this.some(17);
}
这意味着在第一种情况下(使用this
),init函数必须始终被调用为module.init()
并且不能传递给回调
setTimeout( module.init, 1000 );
//this line will does not work with the `this.init` variation
//but will work fine in the second version
因为我不喜欢像第二个版本那样重新输入功能名称,所以我个人更喜欢在我的模块中使用以下样式:
var module = (function(){
var M = {}; //private namespace.
//decouples from the actual name and I
//can always use the same letter (for consistency)
M.init = function(){
M.some(17);
};
M.some = function(){
//
}
function other(){ ... }
return M;
}());