javascript - js的this绑定问题
大家讲道理
大家讲道理 2017-04-10 15:30:08
[JavaScript讨论组]
function foo() {
    console.log( this.a );
}

var obj = {
    a: 2
};

var bar = function() {
    foo.call( obj );
};

bar.call( window ); // 2

问题是,为什么无法绑定到window对象?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(4)
怪我咯
bar.call( window );

对于bar而言,this已经绑定到window对象上了,但是对于里层的foo

 foo.call( obj );

this是绑定到obj对象上的,this.a就相当于obj.a;查找a的时候不会访问到外层的bar对象,所以bar绑定在window上也不会影响foo的结果。

PHPz

bar的调用对象确实改为了window,但是问题在这里:

var bar = function() {
    foo.call( obj );
};

或许你是想这样,输出undefined

var bar = function () {
    foo.call(this);
}
ringa_lee

当然可以绑定到 window 对象,但是你上面这段代码是把 bar 方法中的 this 绑定到了 window 对象,而 foo 方法中的 this 绑定的还是 obj 对象

怪我咯

function foo() {
console.log( this.a );
}

var obj = {
a: 2
};

var bar = function() {
console.log(this.a); // 这里作用域才是window
foo.call( obj ); //

};

window.a = 22;
bar.call( window ); // 22

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

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