2015-10-05 239 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>