当我试图在js对象中展示某人公共与私人财产时,我突然感到非常困惑。
我们采取以下对象:
function person() {
var name = 'joe';
var age = '32';
this.setName = function (name) {
this.name = name;
}
this.setAge = function (age) {
this.age = age;
}
this.getName = function () {
return this.name;
}
this.getAge = function () {
return this.age;
}
}
var newBuddy = new person();
我希望在这个阶段不要定义newBuddy.name和newBuddy.age。他们是。到目前为止一切都很好!
但是,请看以下内容:
newBuddy.setName('matt'); //I use my setName() method to change the name.
newBuddy.name; // returns "matt" -> that' what I cannot understand.
// I was expecting not to be able to access this property. Ever. See below.
我的思维过程是: 如果我声明this.name ='joe'而不是var name ='joe',我会理解newBuddy.name首先返回'joe',然后返回'matt'。公共财产是可以进入的。
但是因为我用“var name”声明了我的属性,我不应该无法访问这个属性吗?
我的理解是获取名称的唯一方法是使用newBuddy.getName()调用my.getName()方法;
对我而言,在该对象中,newBuddy.name应始终返回undefined。
直到那一刻,我才自信地使用物体,我真的无法弄清楚我在想什么。
我使用Firefox 31.0在我的firebug 2.0.2控制台中运行该代码,我怀疑它有什么不同。
答案 0 :(得分:2)
您不应该使用this
,您已经为name
和age
声明了本地(私有)变量:
function Person() {
var _name = 'Joe';
var _age = 32;
this.setName = function (name) {
_name = name;
}
this.setAge = function (age) {
_age = age;
}
this.getName = function () {
return _name;
}
this.getAge = function () {
return _age;
}
}
答案 1 :(得分:0)
问题在于如何在getter和setter方法中分配/访问变量。
this.setName = function (name) {
this.name = name;
}
设置this.name
时,您将在person
实例上创建该属性。如果您希望设置局部变量name
的值,则只需省略this
。
例如:
this.setName = function (name) {
name = name;
}
然而,这仍然无法正常运行,因为参数name
与'private'属性具有相同的名称,这意味着标识符name
将始终解析为参数{{1而不是'私人'属性。这可以通过重命名参数或私有变量来解决。我只想在私有变量前加name
:
_