我想了解bind()
是如何工作的。在我的JS脚本中,我想创建一个矩形类的实例,然后调用一个函数,该函数使用bind()
函数打印文本,后跟矩形的属性。我有:
class Rectangle {
constructor(height, width) {
this.height = height;
this.width = width;
}
getWidth() {
return this.width;
}
}
let Rectangle1 = new Rectangle(10, 20);
function func1(text) {
console.log(`${text} + ${this.getWidth()}`)
}
let func2 = (text) => {
func1.bind(Rectangle1, text)
}
func2('Rectangle width is: ')
关键是我希望能够调用一个只包含开始文本的函数(func2
)。
当前这段代码不打印任何东西。
我错过了什么?
解决方案:
bind()返回一个新函数。所以func1.bind(Rectangle1, text)
没有执行func1的绑定版本,它只是返回func1的绑定版本。
解决方案是将func1.bind(Rectangle1, text)
更改为func1.bind(Rectangle1)(text)
,以text
作为输入参数调用func1的绑定版本。
感谢@Pointy @Bergi和@James的帮助。
const func2 = (text) => {
func1.call(rectangle1, text);
};
或
const func2 = func1.bind(rectangle1);
参见call和apply的区别。