我正在学习es6箭头功能,我怎样才能通过这个测试?
describe('arrow functions have lexical `this`, no dynamic `this`', () => {
it('bound at definition time, use `=>` ', function() {
var bound = new LexicallyBound();
var fn = () => getFunction();
assert.strictEqual(fn(), bound);
});
答案 0 :(得分:1)
由于getFunction
返回的功能没有做任何事情来证明它已关闭this
,因此我认为没有任何用途可以使用你这里。
如果目标是证明箭头函数是词法绑定的(也就是说它们关闭this
),那么:
it('is lexically bound', function() {
const obj = {
arrow: () => {
return this;
}
};
assert.strictEqual(obj.arrow(), this);
});
如果arrow
未关闭this
,则会返回obj
,而不会返回该回调中this
的当前值。
示例:
function it(label, test) {
try {
test();
console.log(label, "OK");
} catch (e) {
console.log(label, "FAILED", e.message);
}
}
const assert = {
strictEqual(a, b) {
if (a !== b) {
throw new Error("a == b was false");
}
}
};
it('Arrow function is lexically bound', function() {
const obj = {
arrow: () => {
return this;
}
};
assert.strictEqual(obj.arrow(), this);
});
it('Non-arrow function is not lexically bound', function() {
const obj = {
nonarrow: function() {
return this;
}
};
assert.strictEqual(obj.nonarrow(), obj);
});