【发布时间】:2014-10-07 10:17:12
【问题描述】:
当我试图在 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(); 调用我的 this.getName() 方法
对我来说,在那个对象中,newBuddy.name 应该总是返回 undefined。
在那一刻之前,我对使用对象充满信心,但我真的不知道自己错过了什么。
我使用 Firefox 31.0 在我的 firebug 2.0.2 控制台中运行了该代码,我怀疑它有什么不同。
【问题讨论】:
-
我在这里得到了同样的结果:jsfiddle.net/6xxtwrp8我也很好奇这个...
-
哦!我知道为什么......你在变量名前面使用了
this。不要把this放在那里。
标签: javascript object properties private