2016-09-24 101 views
3

使用this關鍵字在一個對象的函數內工作,但引用其他功能時沒有this沒有。當我在對象之前放棄這些功能時,這兩種方式都有效。爲什麼?來自IIFE的對象與返回對象之間的區別

var Obj = { 
    func1: function() { 
    console.log(this.func2()); // works 
    console.log(func2()); // doesn't work 
    }, 
    func2: function() { 
    return 5; 
    } 
}; 
Obj.func1(); 

但這樣做在IIFE相同:

var Obj = (function() { 
    function func1() { 
    console.log(this.func2()); // works 
    console.log(func2()); // works 
    } 
    function func2() { 
    return 5; 
    } 
    return { 
    func1: func1, 
    func2: func2 
    }; 
})(); 
Obj.func1(); 

回答

5

這有什麼好做的IIFE,在你有對象文本的第一個例子,在第二常規功能。

當然,對象常量將需要該對象的名稱(或this如果此值對象,就像對象文本內),隨後屬性來訪問它,而命名的功能可以只需使用該名稱就可以訪問該範圍內的任何地方。

var obj = { 
    prop : function() {...} 
} 

prop(); // fail ... undefined 
obj.prop(); // works 

// then _______________________________________________________________ 

function prop() {...} 

prop(); // works fine 

這真的是你在做什麼,你剛剛結束它在不同的對象,並立即調用函數表達式,所以它看起來有點相同,但事實並非如此。

-1

沒有區別。

在這兩種情況下,您正在使用object。因此,您需要使用this或對象name來調用在對象下定義的函數。

+0

好吧,這是不正確的。看到接受的答案 – RLaaa

相關問題