javascript对象如何在this被改变(call,apply)的情况下获取自身属性?

有个函数接受一个包裹着几个回调函数的对象,而除此之外我还想传一些自定义的参数,在那些回调里会用到。

最初想的是作为对象的属性:

var options = {
    callback: function(){
        console.log(this.a);
    }
};
xxxxx.func($.extend(options, {a: 1}));

但是回调函数执行的时候this会被改变,这样肯定就获取不到a了,有别的方法吗?

如果没有的话我想只能把a包在闭包里,例如这样,不过又要新增一个函数:

var constructOptions = function(a){
    return {
        callback: function(){
            console.log(a);
        }
    }
}
xxxxx.func(constructOptions(1));

实践了一下,这个闭包的方法也很不好,返回的对象必须是在construct函数里创建的,不然闭包也不会把a包进去

阅读 4.3k
2 个回答
有什么问题呢?xxxxx.func函数是怎么调用的

var options = {
    callback: function(){
        console.log(this.a);
    }
};
//
xxxxx.func=function(object){
    ....
    object.callback();
}

xxxxx.func($.extend(options, {a: 1}));

是否可以这样:

var options = {
    callback: function(param){
        console.log(param.a);
    }
};

// 模拟调用
(function(options, param){
    // 改变callback的上下文
    options.callback.call(this, param);
})(options, {a:1});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题