【问题标题】:assign value to function object给函数对象赋值
【发布时间】:2015-10-05 22:35:41
【问题描述】:

我有一个名为 DummyObject 的对象,它有一个名为“值”的属性 试图通过函数'assignValue'分配一个值,但在我尝试分配它后它显示为未定义。我假设在“assignValue”函数中,“v”应该指向“this.value”,当我将它分配给它时,它应该更新“this.value”。

function DummyObject(){
    this.value;
}

DummyObject.prototype.assignValue = function(val){
    var v = this.value;
    v = {val: val};
}

var dObj = new DummyObject();
dObj.assignValue(23);

console.log(dObj);

【问题讨论】:

    标签: javascript object prototype


    【解决方案1】:

    为对象保留了引用,但 this.value 未定义(非对象),因此它不会像您想象的那样工作。用一个对象初始化它,这将通过修改特定属性来工作。

    function DummyObject() {
        this.value = {};
    }
    
    DummyObject.prototype.assignValue = function(val) {
        var v = this.value;
        v.val = val;
    }
    
    var dObj = new DummyObject();
    dObj.assignValue(23);
    
    console.log(dObj); // {value: {value: 23}}

    但是,最好的方法是直接修改this.value

    this.value = {val: val};
    

    【讨论】:

      【解决方案2】:

      JavaScript 中的变量不是这样工作的。当您使用

      创建变量v
      var v = this.value;
      

      您创建的东西完全独立于this.value,而不是this.value 的别名。如果你想更改this.value,你必须直接这样做。

      this.value = {val: val};
      

      【讨论】:

        【解决方案3】:

        如果你说过,JS 不会保留你的指针:

        thing = newThing

        您的局部变量 v 不再指向 this.value,因此完全删除该变量。如果要设置一堆东西,可以使用一个对象,通过引用传递:

        function DummyObject() {
          this.value;
        }
        
        DummyObject.prototype.assignValue = function(val) {
          var v = this.value = { val: val };
          v.somethingElse = 'someData';
        }
        

        【讨论】:

          【解决方案4】:

          查看prototype.toString 以制作自定义对象值。我认为它可能存在问题,因为我看不到它经常使用。您可能想使用dObj.value 来避免任何问题。

          function DummyObject(){
              this.value;
          }
          
          DummyObject.prototype.assignValue = function(val){
              this.value = val;
          };
          
          DummyObject.prototype.toString = function() {
              return this.value;
          };
          
          var dObj = new DummyObject();
          dObj.assignValue(23);
          
          var out = document.getElementById('out');
          
          out.innerHTML += dObj;
          <pre id="out"></pre>

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-11-16
            • 2016-10-30
            • 2015-08-18
            • 2023-03-23
            • 2019-02-15
            相关资源
            最近更新 更多