2012-08-09 10 views
6

コンストラクタを作るときに "new"を使うJavaScriptコードがたくさんあります。 JavaScriptの一部を読んだ後、「新しい」を使うことは猫のパジャマではないようです。それは4年前でした...それはまだ推奨されていませんか?現在の標準とは何ですか?"new"はまだJavaScriptではお勧めできませんか?

答えて

7

newはいつですか? D. Crockfordは有効な点と強い意見を持っていますが、newは言語の一部であり、多くのプロジェクトで非常によく使われています。 newは、プロトタイプ継承モデルの一部であり、コンストラクタ関数を使用して新しいインスタンスを作成するために使用する必要があります。 Crockfordは、のコンテキストを適切に使用し、return thisを使用して、子オブジェクト間のプロパティとメソッドを継承できるように、純粋に機能的なアプローチを指摘しています。一般的な問題とは異なる解決策ですが、newを使用すべきではありません。実際には、すべての時間のほとんどのコピー/貼り付けJSスニペットの1はクロックフォードさん、object.createポリフィルであり、それはnewを使用しています。多くの

if (typeof Object.create !== 'function') { 
    Object.create = function (o) { 
     function F() {} 
     F.prototype = o; 
     return new F(); 
    }; 
} 
+0

これは本当です!彼の著書では、「このスタイルのコンストラクタ関数の使用はお勧めできません」(新しいスタイルを使用するスタイル)と述べています。それから彼は他の解決策を説明する。だからこそ私はこの質問を提起した。 – Parris

+3

場合によっては混乱を招く可能性があるので推奨しませんが、コンストラクタ関数を大文字にするなどの混乱を避けるための一般的な方法があります。クロフトフォードが '++'と '--'を使うことを勧めていないことについても同じことを言えるかもしれません... – elclanrs

+0

どちらも私は使いやすいと思っています。 – Chris

2

何も離れてクロックフォードの影響を受けたObject.createからその道を作って、2008年から変わっていませんECMAScript 5:newには、Douglas Crockfordが強制的に指摘したのと同じ動作と欠点があります。私の意見では、彼はむしろ問題を誇張し、開発者を有用なオペレーターに変えてしまったので、問題なく使用し続けます。私は他の開発者が盲目的に内部化して逆流する(確かに賞賛に値する)Crockfordではなく、自分たちの心を作り上げることを勧めます。

+0

私は同意します。彼はおそらく、私たちは欠点があるという知識でそれを使うべきだと言っていたはずですが、それは有用です。 – Chris

関連する問題