Google Javascript Coding Guidelinesでは、「これらの階層は、最初に表示されるよりもはるかに難しい」ため、マルチレベルのプロトタイプ階層は使用しないでください。 。実際には私はそれが意味することを得ていませんでした。その使用法を説明し、その悪影響を説明するための良い例をどこで見つけることができますか?Javascript:複数レベルのプロトタイプ階層とは何か、なぜそれを避けるべきか
1
A
答えて
0
これはプロトタイプチェーン解決の問題のためです。 foo.bar
のようなものがある場合、bar
プロパティがfoo
オブジェクトに直接属しているわけではないので、プロトタイプチェーンfoo
のbar
を検索し始めます。チェーンが長い場合、プロパティの分解能は比較的長い動作になる可能性があります。
5
これは、2つのレベルの継承の例である:
ここ// 1. level constructor
var Dog = function (name) {
this.name = name;
};
Dog.prototype.bark = function() { /* ... */ };
// 2. level constructor
var TrainedDog = function (name, level) {
Dog.apply(this, arguments); // calling the super constructor
this.level = level;
};
// set up two-level inheritance
TrainedDog.prototype = Object.create(Dog.prototype);
TrainedDog.prototype.constructor = TrainedDog;
TrainedDog.prototype.rollOver = function() { /* ... */ };
// instances
var dog1 = new Dog('Rex');
var dog2 = new TrainedDog('Rock', 3);
、dog1
がDog
プロトタイプからbark
メソッドを継承し、そしてdog2
は(Dog
プロトタイプから)その方法とからrollOver
方法の両方を継承しますTrainedDog
プロトタイプ。
2
私は記事が手動でこれが
に簡素化することができるvar Child = function Child() { ... };
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
// for some common value of extend
extend(Child.prototype, {
...
});
しなければならないでしょうgoog.inherits
またはutil.inherits
のように、手動でプロトタイプチェーンを設定するが、ライブラリを使用していないを参照していると考えています
var Child = function Child() { ... };
goog.inherits(Child, Parent);
extend(Child.prototype, {
...
});
ここで、goog.inherits
は、レガシーブラウザでObject.create
のエミュレーションも処理します。
関連する問題
- 1. 階層内の異なるレベルのCSS浮動小数点を避ける
- 2. パンダ、ピボットテーブルの階層を避ける
- 3. ActiveRecordと2レベルの階層
- 4. 複数の階層レベルで値を持つ行を並べ替える
- 5. NHibernateの複数のレベルの階層は、基本クラスのプロパティ
- 6. Sql階層IDレベル別並べ替え
- 7. Xcodeビュー階層デバッガ - "プロトタイプ"
- 8. 複数の階層に属するメンバーのパスとは何ですか?
- 9. フィールドインジェクションとは何か、それを避ける方法は?
- 10. android - ビュー階層とは何ですか?
- 11. ブートストラップスクロール機能付きの3レベル階層?
- 12. オブジェクト階層のWebSphere階層は何ですか?
- 13. SQL:nレベルの階層構造
- 14. JavaScriptのクラスの階層は何ですか?
- 15. 複数の親階層recusion
- 16. 複数の継承階層
- 17. virtualenvとは何ですか、なぜそれを使うべきですか?
- 18. 親子階層の深さレベルを見つける
- 19. Javascript Monads - 階層関数パス?
- 20. JavaScriptのプロトタイプとは何ですか?
- 21. 異なるパラメータでその関数を使用するとき、関数プロトタイプには何を入れますか?
- 22. UICollectionViewの階層は何ですか?
- 23. WCMSの階層は何ですか?
- 24. JavascriptのメソッドCollectGarbage()とは何ですか?いつ、なぜそれを使うべきですか?
- 25. 検索アルゴリズム階層と複数のフィルタ
- 26. なぜそれがプロトタイプ
- 27. 階層レベルでオントロジークラスを取得する
- 28. 複雑な階層のリアクションイベントハンドリング
- 29. 階層データの "レベル"を数える/取得する
- 30. ニューラルネットワークの種類とその階層的分類は何ですか
プロトタイプ継承の基本はよく知っていますか? –
それはどんな理由ですか?それらを正しく行う方法がわかったら、あなたは大丈夫です。 –
あなたがそれらを使うべきではないと言っているわけではありません。それは単にライブラリを使うべきだと言います。短い要約「望ましくない」は誤解を招きやすいもので、おそらく手作業による手抜きを指しています。 – user123444555621