ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript学習ノート - オブジェクト(3):hasOwnProperty_基礎知識

Javascript学習ノート - オブジェクト(3):hasOwnProperty_基礎知識

WBOY
WBOYオリジナル
2016-05-16 16:43:221096ブラウズ
// Poisoning Object.prototype
Object.prototype.bar = 1;
var foo = {goo: undefined};

foo.bar; // 1
'bar' in foo; // true

foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true

ここでは、hasOwnProperty だけが正しい答えを与えることができます。これは、オブジェクトのプロパティをトラバースするときに非常に必要です。 Javascript では、プロパティがオブジェクト自体に定義されているか、プロトタイプ チェーンから継承されているかを判断する他の方法はありません。

プロパティとして OwnProperty があります

JavaScript は hasOwnProperty を機密用語にしません。つまり、hasOwnProperty という名前のプロパティを持つことができます。この時点では、独自の hasOwnProperty メソッドを使用してプロパティを判断することはできなくなりました。そのため、外部の hasOwnProperty メソッドを使用して判断する必要があります。

var foo = {
 hasOwnProperty: function() {
 return false;
 },
 bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // always returns false

// Use another Object's hasOwnProperty and call it with 'this' set to foo
({}).hasOwnProperty.call(foo, 'bar'); // true

// It's also possible to use hasOwnProperty from the Object
// prototype for this purpose
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

概要

オブジェクトのプロパティの存在を判断する場合、信頼できるメソッドは hasOwnProperty のみです。また、for in ループを使用してオブジェクトを走査する場合、hasOwnProperty を使用すると、プロトタイプ オブジェクトの拡張によって引き起こされる問題を効果的に回避できることにも注意してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。