我想了解以下 Javascript 代码,以了解 JS 如何在以下代码中确定此值 [重复]

I want to understand following Javascript code to know how JS determine value of this in below code [duplicate]

提问人:Asad Gulzar 提问时间:6/16/2023 最后编辑:Asad Gulzar 更新时间:9/18/2023 访问量:55

问:

这个问题在这里已经有答案了:
5个月前关闭。

这篇文章在 2 个月前被编辑并提交审核,但未能重新打开帖子:

原始关闭原因未解决

修改后的问题:我在网上遇到了这个代码示例,当我执行它时,控制台上没有记录任何内容。我希望它会记录“用户名”,但它没有。我想知道为什么会这样。为什么“this”不指向新创建的对象?JavaScript 如何确定“this”的引用?如果我将普通函数更改为箭头函数,会发生什么情况,如果我在函数中包含完整条件,会发生什么情况?

function createObj() {
      // create an object and return from function
      return {
         name: "User Name", 
         reference: this,
      };
    }
    // newly created object assigned to a user variable 
    var user = createUser();
 
    console.info(user.reference.name);

JavaScript 对象 范围

评论

0赞 epascarello 6/16/2023
this是对示例中 window 对象的引用。
0赞 Mister Jojo 6/16/2023
用于获取console.log( user.name );"User Name"

答:

1赞 Bharat 6/16/2023 #1

thisJavascript 中的关键字取决于定义它的上下文。这是一篇解释关键字的文章this

在您的示例中,如果需要获取函数返回的对象的引用,请更改为函数,如下所示createUseruserRef

function createUser() {
   return {
      name: "User Name",
      userRef: function() {
        return this;
      },
   };
}

0赞 udoyhasan 6/16/2023 #2

为了使用,您必须将其视为函数。thisuseRef()

function createUser() {
  return {
    name: "User Name",
    useRef(){
      return this;
    },
  };
}

let user = createUser();
   
console.log(user.useRef().name);