gpt4 book ai didi

javascript - 理解 MDN 的绑定(bind)示例

转载 作者:行者123 更新时间:2023-11-29 21:49:45 25 4
gpt4 key购买 nike

大家好,我一直在尝试了解 bind() 方法在 JS 中的作用,我在 SO 中找到了一些有用的资源。 , MDN还有git确实很好地解释了这一点,但我仍然对我在 MDN 上找到的一个实际示例感到困惑。我正在谈论的以下代码:

function LateBloomer() {
this.petalCount = Math.ceil(Math.random() * 12) + 1;
}

// Declare bloom after a delay of 1 second
LateBloomer.prototype.bloom = function() {
window.setTimeout(this.declare.bind(this), 1000);
};

LateBloomer.prototype.declare = function() {
console.log('I am a beautiful flower with ' +
this.petalCount + ' petals!');
};

现在像 call() 或 apply() 一样绑定(bind)函数,这就是我到目前为止所理解的,但它的作用是,它可以延迟函数的执行,同时保留或绑定(bind) this 的值 到一个特定的函数。

现在在下面的代码行中:

LateBloomer.prototype.bloom = function() {
window.setTimeout(this.declare.bind(this), 1000);
};

第一个 this 指向什么?第二个 this 指向什么?

最佳答案

this.declare.bind(this)中,第一个this用于获取当前对象的declare方法。然后我们使用 bind 创建一个新函数,该函数将使用特定的 this 值调用该方法,这就是 bind() 的参数。碰巧我们将它绑定(bind)到当前对象,所以我们在这两个地方都使用了 this,但我们不必这样做。我们可以这样写:

var another = new LateBloomer;
setTimeout(this.declare.bind(another), 1000);

这会获取当前对象的declare 方法,并安排在1 秒内在another 上调用它。

关于javascript - 理解 MDN 的绑定(bind)示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29864734/

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