JavaScript,这是原型方法内部的全局对象

时间:2018-12-13 17:50:09

标签: javascript

我有一堂课,做一些非常复杂的事情。对于此示例,我将其简化为以下内容:

class MyClass {
    constructor(name) {
        this.name = name;
    }
}

MyClass.prototype.sayName = function (cb) {
    return this.getName(cb);
};
MyClass.prototype.getName = function (cb) {
    setTimeout(() => {
        console.log("My name is " + this.name);
        cb();
    }, 1000);
};

现在在此示例中当然不需要异步代码,但是在实际示例中,存在异步代码(例如,网络请求)。我只是简化了它,以使此问题变得更容易。另外,这个实际的类是3rd Party软件包的一部分,所以我对此没有任何控制。

无论如何,我有以下代码可以完美正常工作:

const myInstance = new MyClass("Bob");
myInstance.sayName(() => {
    console.log("Done");
});

为了使代码中的代码更加一致,我正在尝试构建一个包装程序,将这些回调转换为promise:

const myInstance = new MyClass("Bob");
const standard = () => {
    return getPromise(myInstance.sayName);
};
standard();
function getPromise(func) {
    return new Promise(function(resolve, reject) {
        func(function() {
            resolve();
        });
    });
}

问题是。该代码不起作用。我收到以下错误:

  

(节点:58910)UnhandledPromiseRejectionWarning:TypeError:this.getName不是函数

在第二个示例sayName的{​​{1}}方法内部看起来是在引用全局对象,而不是MyClass的实例。

为什么此代码不起作用?当我尝试在包装器中使用this时为什么还有其他原因?

0 个答案:

没有答案