如何从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最有可能来自那里)这个
是可选的,所以它不会很明显