如何从JavaScript中的公共方法中访问私有属性?

时间:2012-11-22 14:31:35

标签: javascript oop inheritance prototype

  

可能重复:
  Javascript: Do I need to put this.var for every variable in an object?

我想在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>

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

没有公共或私有(甚至当你引用它们时),只有对象属性和变量。您无法访问不在范围内的变量。 .addData方法的定义超出了data变量的范围。

只要您有对象的引用,就可以访问对象属性,因此将其设为对象属性:

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

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

答案 2 :(得分: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'
    }
}

然而,这将与您似乎希望实施的原型继承相关。