2016-07-27 80 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中并不总是正确的,但是因为你刚开始时应该这样想,如果你将一个函数作为变量传递给另一个函数然后调用它,那么情况就不会如此)。