私は以下の状況を思いついた:
function Dog () {
"use strict";
this.age = 1;
var name = "Fido";
this.getName = function () { return name; }
}
そして今、私は「Dog」クラスの新しいインスタンスを作成し、変数の値を出力しています。
var d = new Dog;
document.write('<strong>Dog age:</strong> ' +d.age); \\Outputs "1" as expected
document.write('<br/>');
document.write('<strong>Dog name:</strong> ' +d.name); \\Outputs "undefined" as expected, 'cause it's a private variable.
document.write('<br/>');
document.write('<strong>Get Dog name:</strong> ' +d.getName()); \\Outputs "Fido", as expected.
しかし、次のように犬の名前を変更したいとします。
d.name = "Stinky";
document.write('<br/>');
document.write('<strong>Dog name Again:</strong> ' +d.name);
document.write('<br/>');
document.write('<strong>Get Dog name Again:</strong> ' +d.getName());
これに基づいて、私はいくつかの質問を受けました:
- いったいなぜ「d.name」は私に「undefined」を表示しなかったのですか?「名前」はプライベート変数ではありませんか?プライベート変数の値は変更できないと思いますよね?このプロセスで新しい変数が作成されたのではないかと思いますが、今回はパブリック変数で、同じ名前です。もしそうなら、同じ名前の新しいプロパティを割り当てようとするたびに新しい変数が作成されないようにする方法はありますか?「タイプエラー」などをスローする方法はありますか(まあ、これは私が期待していたことでした)。
- そして最後に:新しい値を割り当てた後でも、なぜ「getName」は元の値「Fido」を出力したのですか?
何か案は?
これが物事を簡単にするためのfidです。