彼の「Good Parts」では、「new」を決して使用しないことを提案しています。このルールに従うには、次のコードをどのようにリファクタリングしますか?'New'を置き換えるルール
function Range(from, to) {
this.from = from;
this.to = to;
}
Range.prototype = {
includes: function(x) {
return this.from <= x && x <= this.to;
},
foreach: function(f) {
for(var x = Math.ceil(this.from); x <= this.to; x++) f(x);
},
toString: function() {
return "(" + this.from + "..." + this.to + ")";
}
};
// Here are example uses of a range object
var r = new Range(1,3); // Create a range object
r.includes(2); // => true: 2 is in the range
r.foreach(console.log); // Prints 1 2 3
私は彼のadditional adviceを発見、この(おそらく非常に一般的な)場合には、それをどのように適用するか明確ではありませんでした。巨大なオブジェクトリテラルを含むファクトリ関数を作成することを提案しますか?もしそうなら、それは非効率的ではない?そのようなファクトリ関数は、呼び出すたびに重複関数を作成します。つまり、共有カスタムメソッドを保持するプロトタイプはありません。
彼のアドバイスで何か言われていないようですが、私は誰かがそれをクリアできることを望んでいます。
「new」は使用しないでください。それに全く同意できません。 –
このスレッドを読んでみませんか:http://stackoverflow.com/questions/383402/is-javascript-s -new-キーワードと見なされる有害なもの –
Crockfordの「提案」はまさにそれであり、塩の穀物でそれらを取ってください。 –