Javascript 为什么';t bind(this)作为参数应用于对函数的抽象调用?
我试图通过传递一个通用函数来创建一种调度器,该函数可以是采用相同参数的多个函数之一。当我绑定Javascript 为什么';t bind(this)作为参数应用于对函数的抽象调用?,javascript,class,ecmascript-6,this,bind,Javascript,Class,Ecmascript 6,This,Bind,我试图通过传递一个通用函数来创建一种调度器,该函数可以是采用相同参数的多个函数之一。当我绑定this时,它似乎从未被绑定,而是this始终是全局对象。这里有一个例子 类测试器{ 构造器(x){ this.num=x; } 打印机(文本){ console.log(text+this.num); } 通用打印机(f){ f(“编号为:”)。绑定(此) } } 设t=新测试仪(6); t、 通用打印机(t.printer)除了Felix的评论: 这将抛出一个错误。您正在调用返回值为f的.bind
this
时,它似乎从未被绑定,而是this
始终是全局对象。这里有一个例子
类测试器{
构造器(x){
this.num=x;
}
打印机(文本){
console.log(text+this.num);
}
通用打印机(f){
f(“编号为:”)。绑定(此)
}
}
设t=新测试仪(6);
t、 通用打印机(t.printer)代码>除了Felix的评论:
这将抛出一个错误。您正在调用返回值为f的.bind
您可能不想这样使用bind
<代码>绑定
将在每次调用时创建一个新的函数对象。您可能希望使用apply
:
class Tester {
constructor(x){
this.num = x;
}
printer(text){
console.log(text + this.x);
}
generalPrinter(f, ...args){
f.apply(this, ["number is: ", ...args])
}
}
const t = new Tester(6);
t.generalPrinter(t.printer);
除Felix的评论外:
这将抛出一个错误。您正在调用返回值为f的.bind 您可能不想这样使用
bind
<代码>绑定将在每次调用时创建一个新的函数对象。您可能希望使用apply
:
class Tester {
constructor(x){
this.num = x;
}
printer(text){
console.log(text + this.x);
}
generalPrinter(f, ...args){
f.apply(this, ["number is: ", ...args])
}
}
const t = new Tester(6);
t.generalPrinter(t.printer);
这将抛出一个错误。您正在对
f
的返回值调用.bind
(f(“number is:”)
调用该函数)。你想打电话(这个号码是:)。你说得对,这可能是唯一的问题。谢谢,这应该是个错误。您正在对f
的返回值调用.bind
(f(“number is:”)
调用该函数)。你想打电话(这个号码是:)。你说得对,这可能是唯一的问题。谢谢谢谢,看起来apply
和call
在这里有意义。什么时候使用bind才有意义?bind
在需要传递this-bind函数且不希望覆盖this时非常有用。具有由bind
定义的上下文(this
)的函数不能被重写。。。i、 e,函数p(){console.log(this)};p、 绑定(2)。绑定(3)(
将打印2
,而不是3
。@JonathanWexler:这可能会有帮助:谢谢,看起来应用
和调用
在这里有意义。什么时候使用bind才有意义?bind
在需要传递this-bind函数且不希望覆盖this时非常有用。具有由bind
定义的上下文(this
)的函数不能被重写。。。i、 e,函数p(){console.log(this)};p、 绑定(2)。绑定(3)(
将打印2
,而不是3
。@JonathanWexler:这可能会有帮助: