//中毒object.protopeobject.prototype.bar = 1; var foo = {goo:undefined}; foo.bar; // foo in 1'bar '; // truefoo.hasownproperty( 'bar'); // falsefoo.hasownproperty( 'goo'); // 真実ここでは、HasownPropertyのみが正解を与えることができます。これは、オブジェクトのプロパティを横断する場合に非常に必要です。 JavaScriptには、属性がオブジェクト自体に定義されているのか、プロトタイプチェーンから継承されているのかを判断する他の方法はありません。
HasownPropertyとしての財産
JavaScriptは、HaSownPropertyを敏感な単語として設定していません。つまり、HasownPropertyという名前のプロパティを持つことができます。現時点では、HasownPropertyメソッドを使用してプロパティを判断することはできなくなるため、外部HasownPropertyメソッドを使用して判断を下す必要があります。
var foo = {hasownproperty:function(){return false; }、bar: 'ここにドラゴン'}; foo.hasownproperty( 'bar'); //常にfalseを返します//別のオブジェクトのhasownPropertyを使用し、foo({})に「この」セットで呼び出します。 // true //この目的のためにObjectからhasownPropertyを使用することも可能です。 // 真実要約します
オブジェクト属性が存在すると判断するとき、HasownPropertyは依存できる唯一の方法です。また、Loopを使用する場合、オブジェクトを横断する場合、HasownPropertyを使用することは、プロトタイプオブジェクト拡張機能によって引き起こされるトラブルを回避するのに適していることを思い出させたいと思います。
以下は、他のネチズンからの追加です。
JavaScriptのオブジェクトオブジェクトプロトタイプのhasownProperty()は、プロパティがプロトタイプチェーンから継承されるのではなく、オブジェクト自体で定義されていると判断するために使用されます。
obj.hasownproperty(prop)
パラメータープロップ
検出される属性文字列名またはシンボル(ES6)
o = new object(); o.prop = 'exists'; o.hasownproperty( 'prop'); // trueo.hasownProperty( 'toString')を返します。 // false.hasownproperty( 'hasownproperty'); // falseを返します
HasownPropertyをオブジェクトのプロパティ名として使用します
JavaScriptはHasownPropertyを敏感な単語として使用していないため、オブジェクトの1つのプロパティをHasownPropertyと名付けているため、オブジェクトプロトタイプのHasownPropertyメソッドを使用してプロパティがプロトタイプチェーンからであるかどうかを判断できなくなる可能性が非常に高くなります。
var foo = {hasownproperty:function(){return false; }、bar: 'ここにドラゴン'}; foo.hasownproperty( 'bar'); //常にfalseを返しますこのObject.hasownPropertyメソッドを使用しないことでこの問題を解決する方法は?プロトタイプチェーンで実際のHasownPropertyメソッドを使用する必要があります。
({})。hasownproperty.call(foo、 'bar'); // true //または:object.prototype.hasownproperty.call(foo、 'bar'); // 真実参照:https://developer.mozilla.org/zh-cn/docs/web/javascript/reference/global_objects/object/hasownproperty