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:这可能会有帮助: