我花了好几个小时才试图理解javascript中的函数和方法绑定。我看过一些关于" BINDING"在互联网上但我无法轻易理解它们。我希望有人能在这里更清楚地向我解释。
我有这个javascript代码:
function Foo(name) {
this.name = name;
}
function sayHello() {
console.log('Hello ' + this.name);
}
var foo = new Foo('Jack');
var substFunc = foo.sayHello.bind(foo);
substFunc();
我希望sayHello()
函数与Foo()
绑定,因此我可以将其用作显示" Hello,Jack"的方法,但它失败并显示一条消息在控制台上:
未捕获的TypeError:无法读取属性' bind'未定义的(...)
答案 0 :(得分:2)
你非常接近,你对Function#bind
的理解不是问题
sayHello
不是foo
的属性,但它是一个全局变量,因此您可以像以下一样访问它:
var substFunc = sayHello.bind(foo);
<强>段:强>
function Foo(name) {
this.name = name;
}
function sayHello() {
console.log('Hello ' + this.name);
}
var foo = new Foo('Jack');
var substFunc = sayHello.bind(foo);
substFunc();
答案 1 :(得分:1)
由于您正在使用
,此错误即将发生foo.sayHello
...但你从未为foo定义过这个函数。 sayHello是一个独立的职能。这有意义吗?
另外......理解绑定的一种更简单的方法是使用简单的jquery事件绑定器。
假设您按下按钮以在按下按钮时触发按钮。该函数是buttonPressed()。因为按钮叫做这个功能......如果你打电话给&#34;这个&#34;从它将要参考按钮的功能。
$button.on('click', buttonPressed);
function buttonPressed(){
//this == button
}
但是如果你想用&#34;这个&#34;操纵另一个元素。变量。你改为绑定其他元素。
$button.on('click', buttonPressed).bind($otherElement);
function buttonPressed(){
//this == otherElement
}