2010-04-18 20 views
5

如果在一個文字對象中,我嘗試在嵌套的屬性/函數內使用「this」引用一個函數,這是行不通的。爲什麼?嵌套屬性有它自己的範圍?文字內部的嵌套函數對象

例如,我想從裏邊d.f2調用F1:

var object = {  

    a: "Var a", 
    b: "Var b", 
    c: "Var c", 

    f1: function() { 
    alert("This is f1"); 
    }, 

    d: { 
     f2: function() { 
     this.f1(); 
    } 
    }, 

    e: { 
     f3: function() { 
     alert("This is f3"); 
    } 
    } 
} 

object.f1(); //工作
object.d.f2(); //不工作。 object.e.f3(); //工作

謝謝,安德烈。

+4

在f2裏面,'this'指向'd',而不是'object'。 – Matt 2010-04-18 10:24:52

回答

9

this指的是d裏面的f2而不是object。你可以存儲一個參考對象,或直接致電object,或使用call/apply調用的函數,並明確告訴它意味着函數裏面有什麼this

object.d.f2.call(object); // now this refers to object inside f2 
0

這這也將工作,因爲它具有的功能範圍

var object = {  


    d: { 
     myThis = this; 
     f2: function() { 
     myThis .f1(); 
     } 
    }, 
    } 
+0

好主意,但它包含一些錯誤,並且不會以其當前形式工作。 – WynandB 2013-09-18 05:06:10

3

這裏的另一種方法,它不改變的thisf2()的背景下,基於@slaver113's idea

 
var object = (function() { 
    var _this = { 
    f1: function() { 
     alert('This is f1'); 
    }, 
    d: { 
     f2: function() { 
     _this.f1(); 
     } 
    } 
    } 

    return _this; 
})(); 

object.d.f2(); // Alerts 'This is f1' 
+2

+1模塊模式http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript – 2015-02-20 08:04:32