Javascript 如何从嵌套函数访问构造函数的方法/字段

Javascript 如何从嵌套函数访问构造函数的方法/字段,javascript,javascript-objects,Javascript,Javascript Objects,我试图从嵌套函数访问构造函数的字段 这是我的密码: 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"));

我试图从嵌套函数访问构造函数的字段

这是我的密码:

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?
     }
  }
}
如果我这样调用scroll方法:

var a = new Box();

$("#button").click(function() {
a.guide.scroll();
});
Box.div
返回为未定义


如果我尝试将
方法中div属性的
id
作为
滚动
this.div
发出
警报,它将使用
指南
对象中的div属性。我尝试使用
Box.div
引用
guide
对象外部的div字段,但这不起作用。请帮我解决这个问题。

将其添加到Box函数的第一行:

var Box = function() {
    var self = this;
然后在警报中,使用
self
而不是
this
,因为
this
不是指顶级功能(框)


将其添加到Box函数的第一行:

var Box = function() {
    var self = this;
然后在警报中,使用
self
而不是
this
,因为
this
不是指顶级功能(框)

这是因为滚动函数中的“this”对象指的是函数本身。您需要缓存对最外面的“this”对象的引用,并改用它。请参阅此小提琴以了解示例:

这是因为滚动函数中的“this”对象指的是函数本身。您需要缓存对最外面的“this”对象的引用,并改用它。请参阅此小提琴以了解示例:


@Topener--
self
总是指顶级函数吗?@codennija是的,因为您在那里定义了
self
,它确实指的是
这个
@Topener--谢谢。答案在你学会之后似乎很明显哈哈@Topener——
self
总是指顶级函数吗?@codennija是的,因为您在那里定义了
self
,它确实指的是
这个
@Topener——谢谢。答案在你学会之后似乎很明显哈哈!