ここでは全く同じ質問をdefine property in constructorに聞いていますが、回答が満足できるものではないと思います。 このコードは、「オブジェクト指向のJavaScriptの原則」という本からコピーされています。コンストラクター、ゲッター、セッターメソッドのObject.defineProperty
function Person(xname) {
Object.defineProperty(this, "name", {
get: function() {
return xname;
},
set: function(newName) {
name = newName;
},
configurable: true,
enumerable: true
});
this.sayName = function() {
console.log(this.name);
};
}
var One = new Person("Mark");
One.sayName();
console.log(One.name);
//output:
//Mark
//Mark
それがさらに同じ名前のローカル変数やオブジェクトプロパティの使用を混乱されたので、私は、名前へのXNameパラメータを変更しています。
私は、このコードが意図したとおりに動作しているのではないかと疑いますが、何かをしているようにも私を混乱させます。
私は「名前」と呼ばれる新しく作成されたインスタンスのプロパティを作成するためにコンストラクタ内Object.defineProperty使用されていることを理解しています。
getterメソッドは、たXNameを返し、まだのXNameは、行の後にスコープを消灯します。varワン=新しい人(「マーク」)。どのようにして後でコードオブジェクトにすることができますか?xnameの値を返すように1つのゲッターを管理しますか?私はそれが動作するはずのように、名を返すためにgetterメソッドを変更した場合ので
そして、それは、のXNameの値であり、エンジンがエラー名が定義されていない報告します。
setterメソッドがまったく機能しないことは言うまでもありません。 One.name = "Mickey"の場合、One.nameはまだ "Mark"に設定されています。
xnameの.nameへの割り当てはありませんが、私はそれを見ませんか?
* "同じ名前のローカル変数とオブジェクトプロパティの使用をさらに混乱させたため、xnameにパラメータ名を変更しました。" 。あなたはセッターを逃した。 –
\ * have =>半*(申し訳ありません)* –