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
しかし、同じ名前の変数が別の変数と見なされているように見えることに気付きました。したがって、上記の例では、 my オブジェクトは、 my をプルする my 関数と比較して、fred
for とは異なるものを報告します。this.myName
var myName
しかし、これと同じ動作は、私が作成するサブオブジェクトでは同じではありません。上記のvar sub
vsthis.sub
の両方の場合、new subObject
呼び出しを使用して、おそらく 2 つのサブオブジェクトを作成します。しかし、両方ともバージョンthis.sub
をvar sub
返すようです。Sewer!
Strings for を使用して 2 つの異なる結果が得られたのに、別のオブジェクトで同じことを試みても同様の結果が得られない理由について少し混乱してthis.myName
いvar myName
ます。私はそれらを間違って使用しているか、 athis
とvar
version の違いを理解していない可能性があると思います。