Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数的生存期上下文绑定_Javascript - Fatal编程技术网

Javascript 函数的生存期上下文绑定

Javascript 函数的生存期上下文绑定,javascript,Javascript,我问自己是否可以将上下文始终绑定到函数 比如说,我们有一个全局函数和一个myClass函数: function myClass() { this.iterator = 1; } function incrementConcreteIterator() { this.iterator++; } 现在,我想在myClass的上下文中调用incrementConcreteIterator,我做到了: let myClassInstance = new myclass(); incremen

我问自己是否可以将上下文始终绑定到函数

比如说,我们有一个全局函数和一个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?

返回一个绑定了
值(以及可选的其他参数)的新函数,而不是更改原始函数,因此您需要使用它:

函数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);