为什么这有效:
var a = () => {
var print = function(i) { console.log(i); return this; }
var print2 = function(i) { console.log(i); return this; }
return { print:print , print2:print2 }
}
a().print(5).print2(5);
这也有效:
var b = () => {
var print = (i) => { console.log(i); return this; }
return { print:print}
}
b().print('Arrow function works');
虽然这不起作用:
var b = () => {
var print = (i) => { console.log(i); return this; }
var print2 = function(i) { console.log(i); return this; }
return { print:print , print2:print2 }
}
b().print(5).print2(5);
请您参考如下方法:
这都是由于箭头函数的行为( docs )
分步说明:
var b = () => {
// 1
var print = (i) => { console.log(i); return this; }
var print2 = function(i) { console.log(i); return this; }
return { print:print , print2:print2 }
}
const res = b()
// 2
const secondRes = res.print(5)
// 3
secondRes.print2(5);
- 此处
print函数保存来自外部作用域的this引用,因此this无法再重新分配 - 现在
print函数未使用来自res变量的this引用,因为this已经附加到上面的print函数 - 因此,
secondRes不会引用b函数返回的对象。但它将使用附加到print函数的this引用。最后,因为secondRes没有print2属性 - 它会抛出
希望对你有帮助<3


