4

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」を使用すると「プライベート」メンバーがエミュレートされることを理解しています.彼らのメソッドを「所有」しないでください。

4

2 に答える 2