我问自己是否可以将上下文绑定到函数中。
让我们说,我们有一个全局函数和一个myClass函数:
function myClass() {
this.iterator = 1;
}
function incrementConcreteIterator() {
this.iterator++;
}
我现在想在myClass的上下文中调用incrementConcreteIterator,我这样做:
let myClassInstance = new myclass();
incrementConcreteIterator.call(myClassInstance);
incrementConcreteIterator.call(myClassInstance);
//myClassInstance.iterator is now 3
一切正常。我现在的期望是,当我绑定myClassInstance时,incrementConcreteIterator将始终在类上下文中被调用,但它不是。
let myClassInstance = new myclass();
incrementConcreteIterator.bind(myClassInstance);
incrementConcreteIterator();
incrementConcreteIterator();
//myClassInstance.iterator is still 1
有没有办法将上下文绑定到incrementConcreteIterator?
答案 0 :(得分:1)
bind
返回一个绑定了this
值(以及可选的其他参数)的新函数,而不是更改原始函数,因此您需要使用它:
function myClass() {
this.iterator = 1;
}
function incrementConcreteIterator() {
this.iterator++;
}
let myClassInstance = new myClass();
let myClassInstanceIterator = incrementConcreteIterator.bind(myClassInstance);
myClassInstanceIterator();
myClassInstanceIterator();
console.log(myClassInstance.iterator);
答案 1 :(得分:0)
.bind()
会返回一个新函数,您需要将其分配给某个东西。
let myClassInstance = new myclass();
myInstanceIterator = incrementConcreteIterator.bind(myClassInstance);
myInstanceIterator();
myInstanceIterator();
// myClassInstance.iterator is now 3
如果你真的想改变incrementConcreteIterator
,你可以这样做:
incrementConcreteIterator = incrementConcreteIterator.bind(myClassInstance);