javascript - 模块化代码中,callback函数如何使用全局的this变量?
天蓬老师
天蓬老师 2017-04-10 15:28:15
[JavaScript讨论组]

代码基本结构如图~
bindLeftEvent作为initLeftMenu的callback函数,但是bindLeftEvent中this已经不是整个代码块中的this,要如何使用call、apply或者其他方法使得bindLeftEvent中的this为全局的this?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
阿神

有两种方法,一种是比较通用的方法,使用在外部定义个this变量,然后使用匿名函数,再使用apply就可以了,入下:

init:function(){
    var self = this;

    self.initLeftMenu(function(){
        self.bindLeftEvent.apply(self,arguments);
    })
}

第二种是es5才提供的新方法 ,使用Function.prototype.bind方法进行绑定,如下


init:function(){ var self = this; self.initLeftMenu(self.bindLeftEvent.bind(this)); }
黄舟
if (!Function.prototype.bind) {
    Function.prototype.bind = function (context) {
        var oldArgs = [].slice.call(arguments).slice(1),
            fn = this;

        return function () {
            var newArgs = [].slice.call(arguments);
            fn.apply(context, oldArgs.concat(newArgs));
        };
    }
}
({
    //...
    init: function () {
        //...前面代码
        self.initLeftMenu(self.bindLeftEvent.bind(self));
    }
    //...
})
ringa_lee

不是可以传进去么?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号