【问题标题】:private object not setting data私有对象不设置数据
【发布时间】:2016-07-27 18:19:47
【问题描述】:

您好,我正在尝试在 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());

【问题讨论】:

  • 因为您将值分配给that._data,但您是从_data 读取的。
  • 感谢我是 javascript 新手,这仍然让我有些困惑。
  • 您要构建什么?当我使用链接列表时,在此列表上执行的操作通常是特定的,我停止尝试实现任何通用 LL,或向节点添加任何逻辑。通常是使用 LL 的代码,这也是在我的实现中管理和修改节点。
  • @Muffin,使用 ES2015 的 getters and setters 进行最佳实践

标签: javascript linked-list


【解决方案1】:

_datathat._data不一样,你必须这样做:

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

或者你可以这样做:

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

第二种方法的好处是您正在模拟一个私有变量(因为您不能在第二种情况下执行 nodeObj._data 但在第一种情况下可以)

也不需要var that = this;,在这种情况下你可以简单地使用this._data

对于您的情况,您可以假设如果您正在调用类似yourObject.someFunction() 的函数,那么在someFunction 内,this 的值等于yourObject。 (这在 javascript 中并不总是如此,但既然你刚开始,你现在应该这样考虑。如果你将一个函数作为变量传递给另一个函数然后调用它,那么情况就不会如此)。

【讨论】:

    猜你喜欢
    • 2014-04-20
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多