假设我们有一个带有函数属性的对象,并且此函数使用this
:
let o = {
a: function() {
return `a, ${this.b}`;
},
b: 'b'
};
我了解下面的代码将显示'a, b'
:
let o = { a: function() { return `a, ${this.b}`; }, b: 'b' };
console.log(o.a());
这是因为javascript认为o.a(...)
的就地“拓扑”是指o
在这种情况下this
被设置为o.a
执行。
我还理解以下内容会产生'a, undefined'
:
let o = { a: function() { return `a, ${this.b}`; }, b: 'b' };
let f = o.a;
console.log(f());
这是因为f(...)
的“拓扑”告诉javascript没有明确的this
。
由于这个原因,我惊讶于以下内容产生了'a, b'
:
let o = { a: function() { return `a, ${this.b}`; }, b: 'b' };
console.log((o.a)());
在我看来,在(o.a)
周围使用括号应迫使javascript将o.a
解析为无约束的,少this
的函数,然后再进行进一步的操作。
为完整起见,此示例成功解除了函数调用实例的绑定:
let o = { a: function() { return `a, ${this.b}`; }, b: 'b' };
let f = () => 'f';
console.log((o.a || f)());
即使第一个操作数上的||
短路,(o.a)
和(o.a || f)
之间仍然存在差异。
this
的值?谢谢!