2015-01-16 51 views
-2

我是新來的Javascript和我的背景是Java。爲什麼我需要改變var value = val;this.value = val;所以當我用console.log(node.value);打印出來我推i的值沒有得到「未定義」錯誤,但沒有必要改變var next = {};this.next = {};爲什麼我需要將`var value = val;`更改爲`this.value = val;`所以我沒有收到「未定義」的錯誤?

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

'變種value'大概應該是'this.value' – Pointy

+1

「獲取未定義的錯誤」 *,其中*是什麼呢?另外,你的'var Node = function ..'基本上什麼都不做。除非你使用'this.',否則它是毫無意義的。 – deceze

+0

我會想象你有麻煩,因爲與本地函數Node有衝突。 –

回答

0

在對象方法(包括其構造函數)中使用'var'關鍵字使該變量變爲私有。雖然您可以通過該對象的其他'priviledge'方法訪問它,但您無法在這些對象之外訪問它。因此,試圖讓你不確定。

;相反地,使用this.name分配一個變量使得公衆,這意味着試圖從對象的作品之外訪問它。

我發現這篇文章對這個問題很有幫助。 http://javascript.crockford.com/private.html

+0

謝謝你的幫助,@Cameron McCluskie –

0
  1. 你沒有得到一個錯誤,你的日誌聲明僅僅輸出undefined因爲node沒有一個叫value屬性。

  2. 這沒有什麼本質上的作用:

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

    你定義兩個局部範圍的變量,但沒有什麼是永遠訪問這些變量。在這個function() { }字面之外,變量是不可訪問的。您的LinkedListfirstlast變量的工作方式相同。試試console.log(list.first),那也是undefined

    如果要創建新的對象實例(this)屬性valuenext,你需要this.valuethis.next做到這一點。

  3. 你沒有看到有任何next問題的原因是因爲你永遠輸出它,你明確地創建反正這裏:

    last.next = node; 
    

    直到這條線的.next財產沒」不存在。

+0

謝謝你的幫助,@deceze。 –

相關問題