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

如何从JavaScript中的公共方法中访问私有属性?,javascript,oop,inheritance,prototype,Javascript,Oop,Inheritance,Prototype,可能重复: 我想用JavaScript创建一个“类”,其他“类”应该从中继承 因此,我使用prototype对象添加了“public方法” 在这些方法中,我希望访问类的私有属性 好像我无法接近他们。我该怎么做?这是我的代码: <!doctype html> <html> <head> <title>OOP test</title> <script> v

可能重复:

我想用JavaScript创建一个“类”,其他“类”应该从中继承

因此,我使用prototype对象添加了“public方法”

在这些方法中,我希望访问类的私有属性

好像我无法接近他们。我该怎么做?这是我的代码:

<!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>

面向对象测试
var ParentClass=函数(){
var数据=[];
}
ParentClass.prototype.addData=函数(somedata){
data.push(somedata);//引用错误:找不到变量:data
}
var p=新的父类();
p、 addData(“foo”);


面向对象测试
var ParentClass=函数(){
这个.data=[];
}
ParentClass.prototype.addData=函数(somedata){
this.data.push(somedata);//引用错误:找不到变量:data
}
var p=新的父类();
p、 addData(“foo”);


面向对象测试
var ParentClass=函数(){
这个.data=[];
}
ParentClass.prototype.addData=函数(somedata){
this.data.push(somedata);//引用错误:找不到变量:data
}
var p=新的父类();
p、 addData(“foo”);

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

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

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

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

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

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

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

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

它抛出一个引用错误,因为变量“data”对函数“ParentClass”是“private”。。要模拟功能性,可以使用闭包类型的方法

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

但是,这将与您似乎希望实现的原型继承相关联。

它抛出一个引用错误,因为变量“data”对于函数“ParentClass”是“private”的。。要模拟功能性,可以使用闭包类型的方法

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

然而,这将涉及到您似乎希望实现的原型继承。

调用
data.push(somedata)
也需要更改为
this.data.push(somedata)
@valmar是的,谢谢,我忘了在其他语言中(C#,java,OP最有可能来自那里)
这个
是可选的,所以调用
data.push(somedata)不会太明显
也需要更改为
this.data.push(somedata)
@valmar是的,谢谢,我忘了在其他语言中(C#,java,OP最有可能来自那里)
这个
是可选的,所以它不会很明显