2015-04-23 109 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