ES5は、numberのmethods~Object
を追加しました。これは、JavaScriptの意味的整合性を損なうようです。ES5のオブジェクトメソッドがObject.prototypeに追加されなかったのはなぜですか?
たとえば、この拡張の前には、JavaScript APIは常にオブジェクトのにあります。
var arrayLength = [].length;
var firstPosInString = "foo".indexOf("o");
...ここで、新しいオブジェクトメソッドは次のようになります。
var obj = { };
Object.defineProperty(obj, {
value: 'a',
writable: false
});
...以下のときは、はるかにconformativeただろう:
var obj = { };
obj.defineProperty({
value: 'a',
writable: false
});
誰もこれが理由として私の好奇心を冷やすことができますか?これが壊れるコードスニペットはありますか?標準化委員会がなぜこのアプローチを選んだのかについての公開討議はありますか?
興味深い...これが' Object.create'とどのように並んでいるか知っていますか?これらの決定がなされた後、あるいはそれ以前に、Crockfordはそれを 'Object.create'として提案しましたか? –
良い質問です。私は考えていない:)私は、これらのAPIが議論されたほぼ同時に、Crockfordが 'Object.beget'を' Object.create'に改名したと思う。 FWIW、docは次のように述べています:_オプションの第2引数を持たないObject.createは、広く普及しているbeget関数と基本的に同じ操作です。我々は(おそらく驚くことではないが)この機能の有用性に同意したが、 "beget"という言葉はおそらく多くの非母国語の英語話者に混乱していると感じていた.' – kangax
CrockfordはES5デザインに直接携わっていて、その後のデザイン・ディスカッションでは、「作成」が好ましい名前として登場しました。 ESデザインの決定を反映させるために、彼は彼の本の中で "beget"の名前を変更しました。 –