Javascript 为什么我需要更改'var value=val;`到`this.value=val;`所以我不';“我得不到一个”;“未定义”;错误

Javascript 为什么我需要更改'var value=val;`到`this.value=val;`所以我不';“我得不到一个”;“未定义”;错误,javascript,Javascript,我是Javascript新手,我的背景是Java。为什么我需要更改var value=val到此值=val所以当我使用console.log(node.value)时不会出现“未定义”错误打印出我推送的值,但无需更改var next={}tothis.next={} var LinkedList = function(e) { var first, last; var Node =function(val) { var value = val; var next = {

我是Javascript新手,我的背景是Java。为什么我需要更改
var value=val
此值=val所以当我使用
console.log(node.value)时不会出现“未定义”错误
打印出我推送的值,但无需更改
var next={}
to
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);
  • 您没有收到错误,您的日志语句只输出
    未定义的
    ,因为
    节点
    没有名为
    的属性

  • 这基本上没有任何作用:

      var Node = function(val) {
          var value = val;
          var next = {};
      }
    
    您定义了两个局部范围的变量,但是没有任何东西可以访问这些变量。在此
    函数(){}
    文本之外无法访问变量。
    链接列表的
    第一个
    最后一个
    变量的工作方式相同。尝试
    console.log(list.first)
    ,这也是
    未定义的

    如果要在新对象实例(
    this
    )上创建属性
    value
    next
    ,则需要使用
    this.value
    this.next

  • 您没有看到“下一步”
  • 有任何问题的原因是因为您从未输出它,并且您在这里显式地创建了它:

    last.next = node;
    
    直到此行,
    .next
    属性才存在


    在对象方法(包括其构造函数)中使用“var”关键字会使该变量成为私有变量。尽管您可以通过该对象的其他“priviledge”方法访问它,但您不能在这些方法之外访问它。因此,试图让你不被定义

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


    我发现这篇文章在这方面很有帮助

    var值
    可能应该是
    this.value
    “Get undefined error”确切位置在哪里?另外,您的
    var Node=function..
    实际上什么也不做。除非你使用
    这个,否则它是毫无意义的。
    。我想你会遇到麻烦,因为它与
    节点
    有冲突,这是一个本机函数。谢谢你的帮助,@deceze。谢谢你的帮助,@Cameron McCluskie