2012-02-06 97 views
0

我想調用必須從當前對象訪問私有屬性的繼承方法。但它只能訪問公共的,出了什麼問題?如何訪問JavaScript中的繼承方法中的私有屬性

我的測試代碼應提醒雙方瓦爾:

  function ParentClass(){ 
       //Priviliged method to show just attributes 
       this.priviligedMethod = function(){ 
        for(var attr in this){ 
         if(typeof(this[ attr ]) !== 'function'){ 
          alert("Attribute: " + this[ attr ]); 
         } 
        } 
       }; 
      } 

      function ChildClass(){ 
       // Call the parent constructor 
       ParentClass.call(this); 

       var privateVar = "PRIVATE VAR"; 
       this.publicVAR = "PUBLIC VAR"; 
      } 
      // inherit from parent class 
      ChildClass.prototype = new ParentClass(); 
      // correct the constructor pointer because it points to parent class 
      ChildClass.prototype.constructor = ChildClass; 

      var objChild = new ChildClass(); 

      objChild.priviligedMethod(); 

該版本的jsfiddle:提前http://jsfiddle.net/gws5s/6/

感謝, 亞瑟

回答

1

沒有什麼不妥。當您使用var關鍵字,javascript中會作出這樣的變量僅限於它是目前定義的當前範圍

這樣:

var privateVar = "PRIVATE VAR"; 

纔可以看到從塊裏面定義,即ChildClass()

查看這個article的更深入的解釋。

+0

ok,但是當繼承ParentClass的priviligedMethod它也被繼承,所以從ChildClass調用它的作用域應該與我聲明的privateVar相同。在相同的範圍內,它必須是可訪問的,或者不是? – user1192922 2012-02-06 18:28:15

+0

不,函數'priviliegedMethod'無法訪問'privateVar'。就像我說的那樣,這個變量被限制在'ChildClass()'函數 – ggreiner 2012-02-06 19:01:21

+0

是的,現在我明白了。感謝您的解釋。 – user1192922 2012-02-07 16:43:27

相關問題