【问题标题】:Javascript "this" issueJavascript“这个”问题
【发布时间】:2015-07-31 16:07:56
【问题描述】:

我是 Javascript 新手,想弄清楚为什么 console.log 没有打印出用户名。我希望函数 NewUser 获取新变量(Emily 和 Jason)并打印出他们的名字以及他们的“生活”。

我的问题似乎是 "this.name="" " 这一行,我不知道如何让 this.name 为新用户获取变量的名称。我试过 this.name;但返回未定义。

function NewUser(){
    this.name="";
    this.life=100;
    this.mana=1000;

    console.log(this.life);
    console.log(this.name);

}


var Jason=new NewUser();
Jason.name="Jason";
var Emily=new NewUser();
Emily.name="Emily";

【问题讨论】:

  • 您已有的代码有什么问题?看起来它会起作用。将初始名称作为参数传递给构造函数可能更好,但你所拥有的也应该工作。
  • console.log() 语句当前位于构造函数内部(当您调用 new NewUser() 时运行。在 之后 之前,您不会设置 name 属性,不过。
  • 使用 '[javascript] this' 搜索 Stackoverflow:1,309,289 结果
  • @KooiInc 这实际上不是使用this 的问题。问题只是执行顺序。 OP 对this.nameSomeUser.name 的引用都是正确的……(只是排序错误)。
  • 非常感谢所有反馈!

标签: javascript this


【解决方案1】:

您只需向函数添加一个参数,如下所示:

function NewUser(name){
    this.name=name;
    this.life=100;
    this.mana=1000;
    console.log(this.life);
    console.log(this.name);
}

var Jason=new NewUser("Jason");
var Emily=new NewUser("Emily");

【讨论】:

    【解决方案2】:

    因为调用构造函数的时候正在执行console.log语句,此时name变量为空字符串。

    var Jason=new NewUser(); // console.log called here
    Jason.name="Jason";
    var Emily=new NewUser(); // console.log called here
    Emily.name="Emily";
    

    要解决此问题,请尝试将用户名传递给函数:

    function NewUser(username){
        this.name=username;
        this.life=100;
        this.mana=1000;
    
        console.log(this.life);
        console.log(this.name);
    
    }
    
    
    var Jason=new NewUser("Jason");
    var Emily=new NewUser("Emily");
    

    【讨论】:

      【解决方案3】:

      在写任何东西之前你正在阅读this.name

      另一种方法是创建一个您可以稍后调用的log 函数。示例:

      function NewUser(){
          this.name="";
          this.life=100;
          this.mana=1000;
      
          this.log = function() {
            console.log(this.life);
            console.log(this.name);
          }
      }
      
      var Jason=new NewUser();
      Jason.name="Jason";
      var Emily=new NewUser();
      Emily.name="Emily";
      Jason.log();
      Emily.log();
      

      【讨论】:

        猜你喜欢
        • 2011-06-08
        • 2012-04-14
        • 2022-11-30
        • 2020-04-27
        • 2015-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多