2016-07-27 94 views
0

嗨我想在Javascript中實現LinkedList。當我給我的節點分配一個值時,當我使用我的getter時,它似乎不存儲它。例如:私人對象沒有設置數據

var Node =function() { 

    var _data; 
    var _next ={}; 
    var that = this; 

    that.getData = function() { 
     return _data; 
    }; 

    that.setData = function(data) { 
     that._data = data; 
    }; 

    that.getNext = function() { 
     return _next; 
    }; 

    that.setNext = function(next) { 
     that._next = next; 
    }; 

    return that; 

}; 

不會工作與:

var nodeObj = new Node(); 
nodeObj.setData("hello"); 
console.log(nodeObj.getData()); 
+0

因爲您將值賦給'that._data',但是您正在從'_data'中讀取它。 – Thomas

+0

感謝我與JavaScript新,這仍然讓我有點困惑。 – Muffin

+0

你想要建立什麼?當我使用鏈接列表時,在此列表上執行的操作通常是特定的,我停止嘗試實現任何通用LL,或者向節點添加任何邏輯。它通常是使用LL的代碼,也就是在我的實現中管理和修改節點。 – Thomas

回答

0

_data是不一樣的that._data,你必須這樣做:

that.getData = function() { 
    return that._data; 
}; 

,或者你可以做到這一點,而不是:

that.setData = function(data) { 
    _data = data; 
}; 

第二種方法的好處是你模擬一個私有變量(因爲你不能在第二種情況下做nodeObj._data,但你可以在第一種情況下)

也不需要var that = this;,你可以簡單地做this._data這個案例。

對於你的情況在這裏,你可以假設,如果你調用像yourObject.someFunction()功能,然後內someFunctionthis值等於yourObject。 (這在javascript中並不總是正確的,但是因爲你剛開始時應該這樣想,如果你將一個函數作爲變量傳遞給另一個函數然後調用它,那麼情況就不會如此)。

相關問題