以下是代码和fiddle:
var test = {
value : "sss",
func1 : function(){
console.log(this.value);
}
};
var test2 = function(){
return {
value : "sss",
func1 : function(){
console.log(this.value);
}
};
}();
test.func1();
test2.func1();
嘿小伙子们,这两种方法调用方式之间的区别是什么。 我必须将test2作为Inmmediate Invoke Function Execution来确保它的工作原理。这是否意味着将煤炭运到纽卡斯尔?哪一个更好或者我应该使用它们?
答案 0 :(得分:2)
嘿小伙子们,这两种方法之间的区别是什么 呼叫。
两个结果对象之间没有显着差异,因为您现在拥有它们。
哪一个更好或者我应该使用它们?
第二种方案为您提供了在闭包中使用一些私有变量的选项,您的方法可以像这样使用:
var test2 = function(){
var cnt = 0;
return {
value : "sss",
func1 : function(){
console.log(this.value);
},
getCnt: function() {
return ++cnt;
}
};
}();
test2.getCnt(); // 1
test2.getCnt(); // 2
当您需要这些私有变量时,您将使用第二种方案。否则,第一个选项稍微简单一点,并且涉及少一个函数调用。
答案 1 :(得分:0)
在第一种方法中,如果将其分配给prototype
,它将使用全局Object
覆盖您的构造函数。这将是需要注意的事项。
第二种方法没有这个问题。
这是我写的一篇文章,详细讨论了这个问题:https://codereview.stackexchange.com/questions/62402/javascript-constructor-and-namespace-in-object-literal-style/86222#86222
答案 2 :(得分:0)
第一个是具有已定义属性和方法的简单对象文字。 请参阅:Object Literals
第二个是立即调用函数表达式(IIFE) 使用它的属性和方法返回一个对象文字。
当您想要使用另一个时,它是当前情况的米,但是第二个允许您拥有私人"东西"并用于Revealing Module Pattern。