あなたのリクエストに応じて、ノイズを減らす機能を開発しました。大切な情報を見逃さないよう、お気に入りのトピックを選択して、メールとウェブで通知をもらいましょう。
ナイトリーバージョンのFirefoxが古いWebサイトを破壊するというバグレポートに対して、Array.prototype.flatten TC39提案の執筆者であるMichael Ficarra氏がsmooshにflattenの名前を変更すると冗談的に提案したところ、JavaScriptコミュニティは声高に反応した。
この議論は、別の名前が提案されただけでなく、Web互換性を損なうことなく進化させるという難題に提案された。
Array.prototype.flattenは、JavaScriptのライブラリやフレームワークで解決できることが多い問題であり、ネスト配列を単一の配列にフラット化するための提案である。例えば:
var arr1 = [1, 2, [3, 4]];
arr1.flatten();
// [1, 2, 3, 4]
このAPIの変更自体はJavaScriptの共通パターンの改善である。残念ながら、PrototypeとMooToolsなどの早期バージョンのJavaScriptライブラリやフレームワークでは、組み込み言語機能のネイティブプロトタイプを拡張してサポートを追加するパターンを採用していた。ほとんどのライブラリは最終的にこれが素晴らしいアイディアではないことに気づき、言語を拡張するための他のアプローチが採用された。
germanyの気象ウェブサイトであるwetteronlineから、Space Jam Webサイトが1996年から今日まで、どのように機能しているのかによって報告されているが、Space Jam Webサイト自身は#smooshgateによる影響を受けない。
MooToolsは提案されている標準とは異なる、非標準バージョンのArray.prototype.flattenが定義されている。しかし、MooToolsがネイティブブラウザ実装を上書きすることだけでは問題にはならない。MooToolsはカスタム配列メソッドを、自身のElements.prototype APIにクローンする。JavaScriptのfor-in反復は、ネイティブメソッドを実行して、列挙可能なプロパティの反復処理をするだけである。エンジニアが非列挙プロパティで上書きしたとしたら、残りは列挙できなくなる。したがって、ネイティブバージョンのArray.prototype.flattenはMooToolsエレメントAPIにはコピーされず、MooToolsのElements.prototype.flattenは壊される。
World Wide Webのように長寿命なシステムのチャレンジは、非破壊的な変更を導入する機能を実装した古いライブラリを使ったプログラム言語を、どのように拡張するかを決めることが困難なことである。多くのWebサイトはまだ機能しているが、Webに互換性のない変更が追加された場合は失われることが忘れらてしまっている。したがって、Webサイト著者がWebサイトが積極的に維持されていない場合に、著者にアップグレードを依頼することが可能か不可能かもしれない。
このような問題を避けるために、エンジニアはネイティブオブジェクトや機能を拡張したり、置き換えたりしないようにし、グローバル名前空間を拡張しないようにする。今日のES2015+では、Symbolsなどの機能は、組み込みのネイティブオブジェクトの振る舞いを変更することなく、必要に応じて、ネイティブオブジェクトを拡張するための、改善されたメカニズムである。
この提案を完成させるために、将来バージョンのECMAScriptに含まれる、(smooshではなく)flattenの代替名、Array.prototypeのフラット化されたアクセッサペア、フラット化するための新しい組み込みオブジェクトの作成などが含まれている。
#smooshgateはJavaScriptエコシステムが広く議論された最初のバージョンではない。以前はleft-padやtrailing semicolonsなどがあった。
Rate this Article
- Editor Review
- Chief Editor Action