Javascript 函数的生存期上下文绑定
我问自己是否可以将上下文始终绑定到函数 比如说,我们有一个全局函数和一个myClass函数:Javascript 函数的生存期上下文绑定,javascript,Javascript,我问自己是否可以将上下文始终绑定到函数 比如说,我们有一个全局函数和一个myClass函数: function myClass() { this.iterator = 1; } function incrementConcreteIterator() { this.iterator++; } 现在,我想在myClass的上下文中调用incrementConcreteIterator,我做到了: let myClassInstance = new myclass(); incremen
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?返回一个绑定了此值(以及可选的其他参数)的新函数,而不是更改原始函数,因此您需要使用它:
函数myClass(){
这个迭代器=1;
}
函数incrementConcreteIterator(){
这个是.iterator++;
}
让myClassInstance=new myClass();
让myClassInstanceIterator=incrementConcreteIterator.bind(myClassInstance);
myClassInstanceIterator();
myClassInstanceIterator();
log(myClassInstance.iterator)
.bind()
返回一个新函数,您需要将它分配给某个对象
let myClassInstance = new myclass();
myInstanceIterator = incrementConcreteIterator.bind(myClassInstance);
myInstanceIterator();
myInstanceIterator();
// myClassInstance.iterator is now 3
如果您确实想更改incrementConcreteIterator
,可以执行以下操作:
incrementConcreteIterator = incrementConcreteIterator.bind(myClassInstance);