2012-04-02 87 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/