gpt4 book ai didi

javascript - "this".then()调用时对象方法中的变量是全局对象

转载 作者:行者123 更新时间:2023-11-28 14:46:23 25 4
gpt4 key购买 nike

我对 Promise 很陌生,但我的理解是 .then() 的参数是 2 个函数(可选)来处理 onfulfilled 和 onreject。这些函数可以返回一个值、一个 promise 或抛出一个错误。

我还看到过一些例子,其中履行函数是在其他地方定义的函数,例如:

function onFulfill(){...}
promise.then(onFulfill)

我正在尝试创建一个自定义对象,该对象具有一些功能,这些功能可以是这些 onFulfill 等功能,请参阅下面的示例。

function Test() {
this.value = "something"
}

Test.prototype.makePromise = function() {
console.log(this)
return Promise.resolve();
};

Test.prototype.test = function() {
console.log(this)
};

var T = new Test();

T.test()

var P = Promise.resolve().then(T.makePromise)

我的问题出现是因为当我调用 T.test() 时打印的“this”符合预期。但是当我将 T.makePromise 传递给 .then() 函数时,它会将全局对象打印为“this”,我不明白为什么会出现这种情况。

我知道我可以通过执行以下操作来使其正常工作:

var P = Promise.resolve().then(()=>{return T.makePromise()})

但我不明白为什么我必须这样做。

谢谢。如果这是一个非常基本的问题,我很抱歉。我也不认为这很重要,但我正在从节点使用它。

最佳答案

由于您正在传递函数引用,因此它失去了与对象T的连接。您没有传递 T + makePromise,而是传递 makePromise,就好像它是一个独立函数一样。因此,T 在调用上下文中不能再是 this

就这样写:

const P = Promise.resolve().then(() => T.makePromise())

现在,当调用 makePromise 时,T 在作用域上可用,并自动绑定(bind)到 this

关于javascript - "this".then()调用时对象方法中的变量是全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46246861/

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