2014-08-29 62 views
2

我有一个功能foo它在window.scroll上被调用。我想访问foo中的对象变量,例如我想从父对象打印hello的值。如何在滚动事件中访问对象作用域?

jsfiddle link

var Object = { 
hello: "hello", 

    foo: function(e){ 
     alert(this.hello); //Prints undefined! I want to get this.hello 
    }, 

    scrollListener: function(){ 
    var _this = this; 
    $(window).scroll(_this.foo); 
    }, 
}; 
+0

根据的jsfiddle,调用时使用的代码是正确的'Object.foo({});从'' – Mic1780 2014-08-29 17:03:23

+0

删除'.hello' this',你就会明白为什么。在你的上下文中''this''指'窗口' – 2014-08-29 17:04:02

+0

我明白为什么这不可用。 'this'指的是滚动事件 – Anenth 2014-08-29 17:10:01

回答

2

我认为,在一个匿名函数包装_this.foo会做的伎俩。

使用这window.scroll

$(window).scroll(function(){ 
     _this.foo(); 
}); 

DEMO

0

有2个解决方案

1)使用$.proxy这样的伎俩。

$(window).scroll($.proxy(_this.foo,this));

DEMO

2)返回FOO函数然后调用它。

foo: function(context) { 
    var that = context; 
    return function(e){ alert(that.hello); } 
}, 

scrollListener: function(){ 
    var _this = this; 
    $(window).scroll(_this.foo(_this)); 
}, 

DEMO

相关问题