2012-04-02 91 views
0

我試圖從嵌套函數訪問構造函數的字段。如何從嵌套函數訪問構造函數的方法/字段

這裏是我的代碼:

var Box = function() { 
    this.div = $("div#mydiv"); 
    this.guide = { 
    div: $("div#mydiv2"), 
    scroll: function() { 
     $(document).scrollTo(this.div); //Want to scroll to mydiv2 
     alert(Box.div.attr("id")); //Want to alert mydiv id 
            //How do I access the div field of the Box constructor? 
    } 
    } 
} 

如果我叫滾動方式是這樣的:

var a = new Box(); 

$("#button").click(function() { 
a.guide.scroll(); 
}); 

Box.div正在恢復爲未定義。

如果我嘗試alert股利財產idscroll方法this.div它將使用guide對象內部的div屬性裏面。我試過使用Box.div來引用guide對象之外的div字段,但這不起作用。請幫我弄清楚這一點。在警報然後

var Box = function() { 
    var self = this; 

,用self代替this作爲this是不是指的頂級功能(箱):

回答

2

一下添加到存儲箱功能的第一行。

$(document).scrollTo(self.div); 
+0

@ Topener - 所以沒有'self'總是與頂級的功能? – dopatraman 2012-04-02 22:01:14

+0

@codeninja是的,因爲你在那裏定義了'self',它確實指的是'this'' – 2012-04-02 22:04:49

+0

@ Topener - 謝謝。在你學習哈哈之後,答案似乎很明顯! – dopatraman 2012-04-02 22:12:00

2

這是因爲你的滾動函數中的「this」對象是指函數本身。您需要緩存對最外面的「this」對象的引用,並使用它。看到這個搗鼓一個例子:

http://jsfiddle.net/tuando/kBc5K/