コンストラクター関数内でのプロトタイプ メソッドの割り当て: 潜在的な落とし穴
文体的には、プロトタイプ メソッドを定義するために次の構造を好む人もいます。
var Filter = function( category, value ){ this.category = category; this.value = value; // product is a JSON object Filter.prototype.checkProduct = function( product ){ // run some checks return is_match; } };
ただし、このアプローチには、代替構造と比較していくつかの欠点があります。
var Filter = function( category, value ){ this.category = category; this.value = value; };// var Filter = function(){...} Filter.prototype.checkProduct = function( product ){ // run some checks return is_match; }
機能的な欠点:
var Counter = function(initialValue){ var value = initialValue; // product is a JSON object Counter.prototype.get = function() { return value++; } }; var c1 = new Counter(0); var c2 = new Counter(10); console.log(c1.get()); // outputs 10, should output 0
このシナリオでは、メソッド クロージャがプロトタイプで最後に定義された値を参照するため、get() は c1 の代わりに c2 のローカル変数値を返します。
その他の考慮事項:
結論:
最初の構造はスタイル的には好ましいかもしれませんが、機能的な欠点やスコープの問題が発生する可能性があります。一般に、潜在的な問題を回避するために、(2 番目の構造のように) コンストラクター関数の外側にプロトタイプ メソッドを割り当てることをお勧めします。
以上がプロトタイプ メソッドをコンストラクター関数の外部で定義する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。