【问题标题】:Updating a JavaScript object property更新 JavaScript 对象属性
【发布时间】:2016-07-13 01:05:39
【问题描述】:

 function person(f, l) {
     this.firstName = f;
     this.lastName = l;
     this.changeName = function (str) {
     this.lastName = str; }
     this.getInitials = function() {
         {return f[0] + l[0]} }}
 
 var foo = new person("Joe","Smith"); 
 foo.changeName("Brown");
 alert(foo.firstName + " " + foo.lastName);
 alert(foo.getInitials())

第一个alert() 给出了我所期望的,即“Joe Brown”。但是,第二个给出 'JS'。

这里发生了什么?如果foo.lastName 如果现在“棕色”不应该显示JB 而不是JS

【问题讨论】:

    标签: javascript object methods


    【解决方案1】:

        function person(f, l) {
          this.firstName = f;
          this.lastName = l;
          this.changeName = function(str) {
            this.lastName = str;
          }
          this.getInitials = function() {
            //problem here, you are showing variables that initialize class
            //return f[0] + l[0];
            //changeName doesn't affect argument variables, only class vars
            //so you have to use class vars in this func
            return this.firstName[0] + this.lastName[0];
          }
        }
    
        var foo = new person("Joe", "Smith");
        foo.changeName("Brown");
        alert(foo.firstName + " " + foo.lastName);
        alert(foo.getInitials())

    【讨论】:

      【解决方案2】:

      变化:

      this.getInitials = function() {
          {return f[0] + l[0]}
      }
      

      收件人:

      this.getInitials = function() {
          return this.firstName[0] + this.lastName[0];
      }
      

      您将返回传递给 Person (f/l) 的参数的首字母,而不是存储(新)名称的实际变量 (this.firstName/this.lastName)。

      另外,包裹return 的额外{} 块没有意义。我删除了它。

      这是一个有效的 sn-p:

      function person(f, l) {
          this.firstName = f;
          this.lastName = l;
          this.changeName = function (str) {
              this.lastName = str;
          }
          this.getInitials = function() {
              return this.firstName[0] + this.lastName[0];
          }
      }
      
      var foo = new person("Joe","Smith"); 
      foo.changeName("Brown");
      
      alert(foo.firstName + " " + foo.lastName);
      alert(foo.getInitials())

      【讨论】:

        【解决方案3】:

        这里的问题是你实际上得到了你为参数“f”和“l”输入的原始值。当您访问方法this.getInitials 时,您希望使用this.firstNamethis.lastName 而不是f 和l。

        所以您的方法应该是 {return this.firstName[0] + this.lastName[0]} 以便它们正确更新。

        【讨论】:

        • getInitials 是一个吸气剂。它不会改变任何东西。
        • 抱歉,原评论不清楚。我的意思是说他得到的是原始值 'f' 和 'l'(不会被 changeName 更改),而不是更新后的值。
        【解决方案4】:

        尝试使用this.lastNamethis.firstName

        this.getInitials = function() {
          {
            return this.firstName[0] + this.lastName[0]
          }
        }
        

        【讨论】:

          猜你喜欢
          • 2012-03-16
          • 2019-05-02
          • 2021-08-12
          • 2016-12-19
          • 1970-01-01
          • 2013-01-18
          • 2012-09-14
          • 1970-01-01
          • 2020-07-16
          相关资源
          最近更新 更多