我有一个关于 Javascript 对象中的公共和私有变量的问题。这是我一直在使用的简单代码,用于了解变量范围以及私有和公共属性。
var fred = new Object01("Fred");
var global = "Spoon!";
function Object01(oName) {
var myName = oName;
this.myName = "I'm not telling!";
var sub = new subObject("underWorld");
this.sub = new subObject("Sewer!");
Object01.prototype.revealName = function() {
return "OK, OK, my name is: " + myName + ", oh and we say " + global;
}
Object01.prototype.revealSecretName = function() {
console.log ("Private: ");
sub.revealName();
console.log("Public: ");
this.sub.revealName();
}
}
function subObject(oName) {
var myName = oName;
this.myName = "My Secret SubName!";
subObject.prototype.revealName = function() {
console.info("My Property Name is: " + this.myName);
console.info("OK, my real name is: " + myName + ", yeah and we also say: " + global);
}
}
到目前为止,我观察到的有趣的事情是在我的对象中,一个普通的 var 被视为私有的(显然,因为它们在一个函数块中),而一个this
版本是公共的。但我注意到与 同名的变量this.xxx
似乎被认为是不同的变量。因此,在上面的示例中,我的对象fred
将报告this.myName
与我的函数相比不同的东西来拉我的var myName
.
但是对于我创建的子对象,这种相同的行为并不相同。在上述两种情况下,var sub
使用this.sub
调用new subObject
来创建两个子对象。但似乎两者兼而有之this.sub
,并var sub
返回Sewer!
版本。
Som 我有点困惑,为什么如果我使用 Stringsthis.myName
并var myName
得到两个不同的结果,但我尝试对另一个对象做同样的事情却不会产生类似的结果?我想可能是我用错了,或者不理解 athis
和var
version 之间的区别。