2017-11-11 61 views
1

我目前正在學習如何在Javascript中實現二叉搜索樹。我遇到了一個錯誤「無法讀取空值」屬性'數據',我可以修復,但我仍然不明白爲什麼它給出了這個錯誤。無法使用對象讀取null屬性'data'

這裏是我的代碼的簡化版本:

var test = function(){ 
    this.a = null; 

    this.constr = function(val){ 
     this.data = val; 
     this.left = null; 
     return this; 
    }; 

    this.create = function(num){ 
     var b = this.a; 

     if(b === null) 
      //this.a = new this.constr(num); 
      b = new this.constr(num); 
     else 
      b.left = new this.constr(num); 
    }; 
}; 

var c = new test(); 

c.create(5); 
c.create(20); 
console.log(c.a.data); 
console.log(c.a.left); 

,我在第14行評論的代碼:this.a =新this.constr(NUM);工作正常,但下面的它給出了描述的錯誤。這是爲什麼?爲什麼可以分配b.left但不是b本身?是不是bthis.a引用同一個對象?當你將this.ab它擁有分配this.anull參考

+1

分配給'b'不會分配給'this.a'。變量永遠不會是對屬性的引用(除非您使用'with')。是的,當*'b'和'this.a'引用同一個對象時,*改變該對象的屬性*並沒有什麼區別。但是'b'在你建立的條件下保存了'null'的值。 – Bergi

+0

@Bergi謝謝你的回覆我發現你的回答真的很有用,並讓我意識到我在做什麼。 – Vektor

回答

0

,它沒有辦法引用屬性a;當您將新值賦予b = new this.constr(num);b變量引用了新對象,而不是修改該對象的屬性a