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

它会引发引用错误,因为变量“数据”是函数“父类”的“私有”。为了模拟可以使用闭包类型方法的功能。

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 回答