2016-05-11 21 views
5

関数のプロトタイプを動的に拡張することが悪い習慣であるかどうかを知りたい。私はプロトタイプに追加するプロパティ名と関数を受け取る静的メソッドを使用してこれを行うことを検討しています。JavaScript:プロトタイプを動的に拡張するのは悪い習慣ですか?

これは悪い習慣ですか?

function Test() { 
    this.condition = false; 
} 

Test.extend = function(id, task) { 
    this.prototype[id] = function() { 
     return task.apply(this, arguments); 
    }; 
}; 
+7

トラックを保存するのが難しい場合(悪意のあることは通常起こります)に悪用した場合のみです。個人的には、自分のプログラミングでそのレベルのメタに到達したくないのです。 –

+0

あなたのコードがうまくいかないので、悪い習慣です:-) 'this.task'ではなく' task'である必要があり、 'this.prototype [id] = task;' – Bergi

+0

I '確かにわかりませんが、 '.apply'にはいくつかのパフォーマンス上の問題があると思います。 – Rajesh

答えて

0

[id]メソッドがクラス内からオーバーライドされるかどうかを制御できないので、このインスタンスでは悪い習慣だと思います。

var test = new Test(); 
test.extend("example", function() { 
    console.log("First Method"); 
}); 

test.extend("example", function() { 
    console.log("Second Method"); 
}); 

コードがどのようにして、最初のメソッドが無効になってコードがランダムに破られたかを知る方法がありません。

+0

これは、新しいプロトタイプを追加する前にプロトタイプに追加されたメソッドをチェックすることで解決できます。しかし、あなたがこのチェックをしている場合、プロトタイプをこのように拡張するのは悪い習慣ですか? – javascripter

関連する問題