2015-10-05 186 views
0

我有一个名为DummyObject的对象,其名称为'value'我试图通过函数'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);

回答

1

变量在JavaScript中没有这样的。当你与

var v = this.value; 

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

this.value = {val: val}; 
0

JS不保留您的指针,如果你曾经说:

thing = newThing

局部变量v在THIS.VALUE不再指向,所以刚落,这个变量完全。如果你想设置了一堆东西,你可以使用一个对象,这是按引用传递:

function DummyObject() { 
    this.value; 
} 

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

参考文献的保存时间为对象,但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}; 
0

看一看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>