有人可以解释为什么这两种情况下 `this` 不同吗

Can someone please explain why `this` is different in these two cases

let obj = {
    one: function(){
        this.two();
    },

    two: function(){
        console.log("two");
    }
}

let oneFunc = obj.one;

obj.one(); // two

oneFunc(); // TypeError: this.two is not a function

我在 JavaScript 编程已经有一段时间了。我以为我对 this 关键字有非常扎实的掌握。但是,我 运行 今天参与其中,这让我大吃一惊。我不明白为什么会这样。当我调用 oneFunc() 时,this 指的是全局对象。为什么会这样?

this 引用对象,而你在这里所做的是创建一个等于对象方法的函数,因此你失去了对对象的引用。

您可以使用绑定

let obj = {
    one: function(){
        this.two();
    },

    two: function(){
        console.log("two");
    }
}

let oneFunc = obj.one;
oneFunc = oneFunc.bind(obj);

obj.one(); // two

oneFunc(); // TypeError: this.two is not a function