4

JavaScript オブジェクトのプロトタイプを決定する最良の方法は何ですか? 私は次の 2 つの方法を認識していますが、クロスブラウザー サポートに関して、どちらが「最良の」方法であるか (または、より好ましい方法があるか) はわかりません。

if (obj.__proto__ === MY_NAMESPACE.Util.SomeObject.prototype) {
    // ...
}

また

if (obj instanceof MY_NAMESPACE.Util.SomeObject) {
    // ...
}
4

2 に答える 2

6

instanceofが優先されます。__proto__は非標準です。具体的には、Internet Explorer では機能しません。

Object.getPrototypeOf(obj)と同じことを行う ECMAScript 5 関数です__proto__

instanceofプロトタイプ チェーン全体を検索するのに対し、getPrototypeOf1 つ上のステップのみを検索することに注意してください。

いくつかの使用上の注意:

new String() instanceof String  // true

(new String()).__proto__ == String // false!
                                   // the prototype of String is (new String(""))
Object.getPrototypeOf(new String()) == String // FALSE, same as above

(new String()).__proto__ == String.prototype            // true! (if supported)
Object.getPrototypeOf(new String()) == String.prototype // true! (if supported)
于 2013-01-07T18:18:54.597 に答える
3

instanceofは標準ですが、そうで__proto__はありません (まだ - ECMAScript 6 で標準になる可能性が最も高い)。

于 2013-01-07T18:19:09.170 に答える