0

重複の可能性:
Javascript:オブジェクト内のすべての変数にthis.varを配置する必要がありますか?

他の「クラス」が継承する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>
4

3 に答える 3

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>

于 2012-11-22T14:34:12.810 に答える
2

パブリックまたはプライベートはなく(引用符で囲んでも)、オブジェクトのプロパティと変数だけがあります。スコープ内にない変数にはアクセスできません。.addDataメソッドはdata変数のスコープ外で定義されています。

オブジェクトへの参照がある限り、オブジェクトプロパティにアクセスできるため、オブジェクトプロパティにします。

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

ParentClass.prototype.addData = function(somedata){
    this.data.push(somedata);
}
于 2012-11-22T14:34:25.133 に答える
0

変数「data」は関数「ParentClass」に対して「private」であるため、参照エラーがスローされます。クロージャ型メソッドを使用できる機能性をシミュレートします。

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

ただし、これは、実装したいと思われる典型的な継承と干渉します。

于 2012-11-22T14:39:41.987 に答える