为什么此函数中的 "this" 关键字不会在 JavaScript 中给出重复错误?

Why is the "this" keyword in this function not giving an error in JavaScript for duplication?

function makeUser() {
  return {
    name: "John",
    ref() {
      return this;
    }
  };
}

let user = makeUser();

alert(user.ref().name);

根据我从中学到的知识tutorial,它们定义为点之前的对象,因为这是函数的 return 值,我认为它会是用户。

而这个tutorial将其定义为正在执行当前函数的对象。

我认为执行当前函数的对象是user。当你用它的值替换它时,它变成 alert(user.user.name);.

“this”的值不是指对象的名称,而是指对象本身。所以这里没有“重复”,你只是返回一个对象,它恰好是你开始时使用的同一个对象。

如果你把事情分开,这可能会更清楚:

function makeUser() {
  // Create an object
  let myObject = {
    name: "John"
  };
  // Create a function which returns that object
  let myFunction = function(){ return myObject; };
  // Store the function on the object
  myObject.ref = myFunction;
  // Return the new object
  return myObject;
}

// Create an object
let user = makeUser();

// Get the name from the object
alert(user.name);

// Call the ref() function, which happens to return the same object
let otherUser = user.ref();
// Get the name again
alert(otherUser.name);

// No matter how many times you call .ref() it will return the same object
alert(user.ref().ref().ref().ref().name);

this 指的是函数函数所属的对象,或者 window 对象,如果它不属于任何对象。 在这种情况下,ref() 函数是 returning 所有者对象 例如,

当你调用 ref() 时,它会return像这样

{ name: 'John', ref: [Function: ref] }