与方法和功能绑定混淆

时间:2016-12-11 05:48:19

标签: javascript binding

我花了好几个小时才试图理解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'未定义的(...)

2 个答案:

答案 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
}