this 的绑定规则二

2023-03-09  本文已影响0人  alue

this 的第二个绑定规则是隐式绑定, 即指向上下文对象.

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

var obj = {
    a:2,
    foo:foo,
}
var a = 1;

obj.foo() // 依次输出 1 和 2

连续的两次打印, 依次输出 1 和 2. 可以看出在 foo 函数内 a 并不等于 this.a. 这里的 this 指向了 obj 对象.

但是, 如果这样调用

var bar = obj.foo
obj.foo() // 1,2
bar() // 1,1

看上去, 像是等价的语句, 执行结果却不同. 这是因为在 js 中, 函数并不是属于某个对象的. 即便 obj 有个属性绑定了函数 foo, 但 foo 本身是独立于对象obj之外的. 因此, obj.foo() 能够触发隐式绑定, 但 var bar = obj.foo 并不会, 因为 bar并不会引入obj的任何信息, this 自然也无法绑定 obj.

上一篇 下一篇

猜你喜欢

热点阅读