2015-04-23 155 views
0

之间。在此方法调用的是代码和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来确保它可以正常工作。这是否意味着向纽卡斯尔运煤?哪一个更好,或者我应该使用什么情况?

+1

它应该不是'test2()。func1()'? –

+0

没有什么区别,'test'的值是一个对象,就像'test2'的值一样。第二个问题太广泛了。 – Sacho

+0

'test2'创建一个闭包,而'test' dosen't –

回答

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 

你会当你需要这些私有变量使用第二个方案。否则,第一个选项稍微简单一点,并且涉及少一个函数调用。

+0

@nich - 这是否回答你的问题? – jfriend00

0

第一种是简单对象常量定义的属性和方法。 参见:Object Literals

第二个是立即调用函数表达式(IIFE) 返回一个对象字面值与它的属性和方法。

这是当前情况的米,当你想使用另一个,但第二个让你有私人“东西”,并用于Revealing Module Pattern