Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从子方法访问父对象_Javascript_Backbone.js_This - Fatal编程技术网

Javascript 从子方法访问父对象

Javascript 从子方法访问父对象,javascript,backbone.js,this,Javascript,Backbone.js,This,我的主要观点如下: var myView = Backbone.View.extend({ bar: 1, open: function() { $(window).on('resize', this.resizeHandler); }, close: function() { $(window).off('resize', this.resizeHandler); }, resizeHandler: func

我的主要观点如下:

var myView = Backbone.View.extend({
    bar: 1,

    open: function() {
        $(window).on('resize', this.resizeHandler);
    },

    close: function() {
        $(window).off('resize', this.resizeHandler);
    },

    resizeHandler: function(e) {
        alert(this.bar);
    }
});
resizeHandler方法中的this.bar失败,因为“this”不再是对父对象的引用,而是对与事件相关的event/html元素的引用

我如何才能让它工作,使resizeHandler有一个对父对象的引用,而我仍然有一个对一个函数的引用,我可以在jQueryOn和off方法中使用这个函数


谢谢。

您试过使用
bind
()吗

例如:

$(window).on('resize', _.bind( this.resizeHandler, this ) );
正如在报告中所说的那样

也许最常见的JavaScript“gotcha”是这样一个事实 当您将函数作为回调传递时,其
this
的值将丢失。
使用主干,在处理事件和回调时,您通常 发现依赖和来自下划线.js很有用

解决问题的最简单方法可能是使用


还有一个演示(我建议避免使用
alert
来调试代码,尤其是在跟踪鼠标移动/调整大小事件时)

\u Nikosh建议的bindAll更适合我的特殊用途,但是感谢您的帮助。在此上下文中,
.bind
的一个问题是,您必须将
.bind
返回值存储在某个位置,以便
$(窗口)。关闭(…)
它,
.bindAll
为您替换
此.resizeHandler
,这样问题就不会出现。
var myView = Backbone.View.extend({
    bar: 1,

    initialize: function() {
       _.bindAll(this, 'resizeHandler');
    },

    open: function() {
        $(window).on('resize', this.resizeHandler);
    },

    close: function() {
        $(window).off('resize', this.resizeHandler);
    },

    resizeHandler: function(e) {
        console.log(this.bar);
    }
});