0

JavaScript では、オブジェクトが関数を継承する場合、単に name プロパティを使用できないようです。私はこれを node.js でテストしましたが、さまざまなブラウザーでそうである可能性があります。例えば:

var A = function() {}
    A.prototype = function() {}

var x = new A()
x.name = "bob"
console.log(x.name) // logs blank

__proto__この場合、オブジェクト プロトタイプ (つまり ) で指定されたプロパティをオーバーライドできないのは、ほとんどばかげているように思えます。私は夢中になっていますか?

4

1 に答える 1

1

これは関数のせいではなく、プロトタイプにその名前の記述子があるためwritable falseです。Object.getOwnPropertyDescriptor(function(){}, "name").writable === false

記述された書き込み不可のプロパティを通常どおり作成すると、同じことが起こります。

function A() {

}

Object.defineProperty( A.prototype, "name", {
    value: ""
});

var a = new A()

a.name
//""
a.name = "bob"
//"bob"
a.name
//""

Object.definePropertyそれを行うには、次の手順を実行する必要があります。

Object.defineProperty(x, "name", {value: "bob"})
x.name
//"bob"
于 2013-07-23T07:49:06.680 に答える