我是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);
答案 0 :(得分:0)
您没有收到错误,您的日志记录语句只输出undefined
,因为node
没有名为value
的属性。< / p>
这基本上什么都不做:
var Node = function(val) {
var value = val;
var next = {};
}
您正在定义两个本地范围的变量,但没有任何东西可以访问这些变量。在function () { }
字面值之外无法访问变量。 first
的{{1}}和last
变量的工作方式相同。试试LinkedList
,即console.log(list.first)
。
如果要在新对象实例(undefined
)上创建属性value
和next
,则需要使用this
和{{1}执行此操作}。
您没有看到this.value
出现任何问题的原因是因为您从未输出过它,而且您还是明确地创建了它:
this.next
在此行之前,next
属性不存在。
答案 1 :(得分:0)
使用&#39; var&#39;对象中的关键字方法(包括其构造函数)使该变量成为私有。虽然您可以在其他“特权”中访问它。该对象的方法,你不能在那些之外访问它。因此,试图让你不明确。
相反,使用this.name分配变量使其公开,这意味着尝试从对象外部访问它。
我发现这篇文章对这个主题很有帮助。 http://javascript.crockford.com/private.html