this questionと似ていますが、異なるです。以下のコードはJavaScript: The Definitive Guideです。彼は基本的に継承メソッドを定義しています。存在する場合はObject.createを継承します。そうでない場合は、コンストラクタを使用してプロトタイプを交換してプレーンな古いJavascript継承を行います。Object.createを使用する利点
私の質問は、Object.createが
に存在しないので、多くの一般的なブラウザ
IEには、それを使用しようとしても何のポイントがありますか?それは確かにコードを騒がしくし、前の質問のコメント作成者の一人は、Object.create isn't too fastに言及しました。
これを行う「古い」方法よりも遅いかもしれないし、そうでないかもしれないこのECMA 5機能を時々利用するために余分なコードを追加しようとすると、何が利点になりますか?
function inherit(p) {
if (Object.create) // If Object.create() is defined...
return Object.create(p); // then just use it.
function f() {}; // Define a dummy constructor function.
f.prototype = p; // Set its prototype property to p.
return new f(); // Use f() to create an "heir" of p.
}
これは本当に役立つ答えです。作成したオブジェクトのプロパティを多くのコントロールを提供するので、なぜcreateが望ましいのか分かります。なぜあなたが 'var bob = Object.create(userB、{" id ":{value:12、enumerable:false'などと言っても、IE9以下ではこのコードが激しくクラッシュしないと言うことができますあなたのユーザーが使用しているブラウザを制御できる(素晴らしい)状況に限定されているようなコードではないでしょうか? –
つまり、IE8では古いJSを使って新しい継承メソッドを取得する必要があるだけでなくプロトタイプを交換する方法もありますが、渡されたオブジェクトをuserBを継承する "子"オブジェクトとして変更する必要もあります。{{"id":{value:12、enumerable:false 012 "私は" {"id":12、 "name": "bob"}など何も必要ないでしょうか? –
@AdamRackis、それは正しいですが、そのままのコードは後方互換性はありませんが、これらのことを試して合理化するプロジェクト。もしそうでなければ、良い考えです。それらの変更を自動化するのは難しくありません。 – davin