hasOwnProperty は、コンストラクター関数またはインスタンスのどちらで呼び出されるかによって、含まれるメンバーに対する this または let の使用に応じて、異なる動作をするようです。
function Animal(_name) {
let name = _name;
this.getName = function() {
return name;
}
};
function Animal2(_name) {
this.name = _name;
let getName = function() {
return name;
}
}
let a = new Animal("greg");
let a2 = new Animal2("tim");
console.log(a.hasOwnProperty("name"));
console.log(a2.hasOwnProperty("name"));
console.log(Animal.hasOwnProperty("name"));
console.log(Animal2.hasOwnProperty("name"));
console.log("");
console.log(a.hasOwnProperty("getName"));
console.log(a2.hasOwnProperty("getName"));
console.log(Animal.hasOwnProperty("getName"));
console.log(Animal2.hasOwnProperty("getName"));
これにより、次が出力されます。
false
true
true
true
true
false
false
false
これはなぜですか?コンストラクター関数で「let」を使用すると「プライベート」メンバーがエミュレートされることを理解しています.彼らのメソッドを「所有」しないでください。