为什么我需要将`var value = val;`更改为`this.value = val;`所以我没有得到" undefined"错误?

时间:2015-01-16 04:46:02

标签: javascript

我是Javascript的新手,我的背景是Java。为什么我需要将var value = val;更改为this.value = val;,这样我才能获得" undefined"我使用console.log(node.value);打印出我推送的值时出错,但无需将var next = {};更改为this.next = {};

var LinkedList = function(e) {
  var first, last;

  var Node =function(val) {
    var value = val;
    var next = {};
  }
  this.push = function(val) {
    var node = new Node(val);
    if (first == null) {
      console.log(node.value);
      first = last = node;
    }
    else {
      console.log(node.value);
      last.next = node;
      last = node;
    }
  }
}

var list = new LinkedList();
list.push(1);
list.push(2);
list.push(3);

2 个答案:

答案 0 :(得分:0)

  1. 您没有收到错误,您的日志记录语句只输出undefined,因为node没有名为value的属性。< / p>

  2. 这基本上什么都不做:

      var Node = function(val) {
          var value = val;
          var next = {};
      }
    

    您正在定义两个本地范围的变量,但没有任何东西可以访问这些变量。在function () { }字面值之外无法访问变量。 first的{​​{1}}和last变量的工作方式相同。试试LinkedList,即console.log(list.first)

    如果要在新对象实例(undefined)上创建属性valuenext,则需要使用this和{{1}执行此操作}。

  3. 您没有看到this.value出现任何问题的原因是因为您从未输出过它,而且您还是明确地创建了它:

    this.next

    在此行之前,next属性不存在。

答案 1 :(得分:0)

使用&#39; var&#39;对象中的关键字方法(包括其构造函数)使该变量成为私有。虽然您可以在其他“特权”中访问它。该对象的方法,你不能在那些之外访问它。因此,试图让你不明确。

相反,使用this.name分配变量使其公开,这意味着尝试从对象外部访问它。

我发现这篇文章对这个主题很有帮助。 http://javascript.crockford.com/private.html