gpt4 book ai didi

javascript - Mootools 何时使用 Function.prototype.bind

转载 作者:行者123 更新时间:2023-11-30 08:49:32 25 4
gpt4 key购买 nike

我有一个非常基本的问题,我找不到答案,我确实查看了 mootools 网站,但我还没有完全掌握这个概念:

在 mootools 中你有一个函数 .bind() 并且它可以按如下方式使用:

function customFunction () {
this.setStyle('color','blue');
}

var boundFunction = customFunction.bind(myElement);
boundFunction(); //Now the color of the element is changed to red

// To show how bind works the following example:
var myBoundFunction = myFunction.bind(anyVar);
// is roughly equivalent with
var myBoundFunction = function(){
return myFunction.call(this);
};

但为什么不直接这样做呢?

function customFunction (parameter) {
parameter.setStyle('color','blue');
}

customFunction(myElement);

这样看起来更有效率?

我的大问题是:在什么地方使用 .bind() 是个好习惯,为什么会这样?

最佳答案

当将方法作为回调参数传递时,绑定(bind)很有用。假设我们有以下 user 对象:

function User(name) {
this.name = name;
}
User.prototype.sayHi = function() {
console.log("Hi, my name is "+this.name);
}

var user = new User("John");

现在我们想在有人点击某个 div 元素时调用它的 sayHi 方法。我们可以尝试这样做:

$('userDiv').addEvent('click', user.sayHi);

但这不会起作用,因为我们只传递了 sayHi 函数本身,但是它的上下文(this 的值)将会丢失,并且该函数将打印 “嗨,我的名字未定义”

为了保持上下文,我们可以改为:

$('userDiv').addEvent('click', function() { user.sayHi(); });

但是用 bind 附加上下文要简单得多:

$('userDiv').addEvent('click', user.sayHi.bind(user));

关于javascript - Mootools 何时使用 Function.prototype.bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19131304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com