2012-02-06 19 views
0

現在のオブジェクトからプライベート属性にアクセスする必要がある継承されたメソッドを呼び出そうとしています。しかし、それは公共のものにしかアクセスしません、何が間違っていますか?両方のVARSに警告すべき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から呼び出すと、scopeは私がprivateVarを宣言したものと同じでなければなりません。同じスコープ内でアクセス可能である必要がありますか? – user1192922

+0

いいえ、関数 'priviliegedMethod'は' privateVar'にアクセスする手段がありません。私が言ったように、その変数は 'ChildClass()'関数に制約されています – ggreiner

+0

はい、今私は参照してください。説明してくれてありがとう。 – user1192922

関連する問題