为什么核心装饰器的自动绑定定义了两次绑定函数



这是autobind.js的源代码。我对getter方法感到困惑。getter方法返回一个boundFn,但也在"this"上定义了一个boundFn,为什么?为了效率?

get() {
// ...omit
const boundFn = bind(fn, this);
defineProperty(this, key, {
configurable: true,
writable: true,
// NOT enumerable when it's a bound method
enumerable: false,
value: boundFn
});
return boundFn;
},

我这样测试。

function Foo(){}
Object.defineProperty(Foo.prototype, 'test', {
get() {
console.log('123');
Object.defineProperty(this, 'test', {
get(){
console.log('456');
return '456';
}
})
return '123'
}
});
var a = new Foo();
a.test; //FirstTime: 123,
a.test; //and then always: 456,

为了效率。它不会总是查找原型链。我想是的。

最新更新