2012-11-22 171 views
0

可能重複:
Javascript: Do I need to put this.var for every variable in an object?如何在JavaScript的公共方法中訪問私有屬性?

我想在JavaScript中創建一個 「類」 的其他 「類」 應該繼承。

因此,我使用原型對象添加了「公共方法」。

在這些方法中,我想訪問我的類的私有屬性。

看來我無法訪問它們。我該怎麼做呢?這是我的代碼:

<!doctype html> 

<html> 

    <head> 
     <title>OOP test</title> 

     <script> 

      var ParentClass = function(){ 
       var data = []; 
      } 

      ParentClass.prototype.addData = function(somedata){ 
       data.push(somedata); // ReferenceError: Can't find variable: data 
      } 

      var p = new ParentClass(); 
      p.addData("foo"); 

     </script> 
    </head> 

    <body> 
    </body> 

</html> 

回答

2

<head> 
    <title>OOP test</title> 

    <script> 

     var ParentClass = function(){ 
      this.data = []; 
     } 

     ParentClass.prototype.addData = function(somedata){ 
      this.data.push(somedata); // ReferenceError: Can't find variable: data 
     } 

     var p = new ParentClass(); 
     p.addData("foo"); 

    </script> 
</head> 

<body> 
</body> 

+0

是的,工作。謝謝! – Timo

2

有沒有公共或私有的(即使是在你說出來了),有剛對象的屬性和變量。您不能訪問不在範圍內的變量。 .addData方法定義爲data變量的範圍。

對象屬性可以,只要你有對象的引用訪問,因此使它成爲一個對象的屬性:

var ParentClass = function(){ 
    this.data = []; 
} 

ParentClass.prototype.addData = function(somedata){ 
    this.data.push(somedata); 
} 
+0

'data.push(somedata);'的調用也需要改爲'this.data.push(somedata);' – Timo

+0

@valmar yeah謝謝,我忘了其他語言(C#,java,OP最有可能來自)'this'是可選的,所以它不會很明顯 – Esailija

0

它拋出一個引用錯誤,因爲變量「數據」爲「私」來函數'ParentClass'..來模擬你可以使用閉包類型方法的功能。

var ParentClass = function(){ 
    var data = []; 
    this.addData = function(somedata){ 
     data.push(somedata); // Closure will have access to all variables in 'ParentClass' 
    } 
} 

但是,這會干擾你似乎希望實現的原型繼承。

相關問題