JS コードを保守する 3 つの方法

Jun 04, 2018 am 10:45 AM
javascript 方法

今回はJSコードをメンテナンスする3つの方法を紹介します。JSコードをメンテナンスする際の注意点は何ですか?実際のケースを見てみましょう。

メンテナンス。他の言語では、開発タスクを実行するために既存のオブジェクトをライブラリとして使用することを検討してください。 JS では、既存のオブジェクトを、何でもできる背景として扱うことができます。既存の JS オブジェクトをユーティリティ ライブラリのように扱う必要があります。

上書きメソッドはありません

新しいメソッドはありません

削除メソッドはありません

プロジェクトの唯一の開発者である場合、この種の変更は、それらを知っており、期待しているため、簡単に処理できます。チームで大規模なプロジェクトに取り組んでいる場合、このような変更は多くの混乱を引き起こし、多くの時間を無駄にする可能性があります。

メソッドをオーバーライドしない

JS での最悪の習慣は、所有していないオブジェクトのメソッドをオーバーライドすることです。JS で既存のメソッドをオーバーライドするのは非常に簡単です。神聖な document.getElementById() メソッドも例外ではなく、簡単にオーバーライドできます。おそらく、次のようなパターンを見たことがあるでしょう (このアプローチは「関数ハイジャック」とも呼ばれます):

// 不好的写法document._originalGetElementById = document.getElementById;document.getElementById = function (id) {  if (id === 'window') {    return window;
  } else {    return document._originalGetElementById(id);
  }
}
ログイン後にコピー

上の例では、ネイティブ メソッド document.getElementById() の「ポインタ」が document._originalGetElementById に保存されます。その後の使用。次に、 document.getElementById() が新しいメソッドによってオーバーライドされます。新しいメソッドは元のメソッドを呼び出すことがありますが、呼び出さない場合もあります。この「オーバーライドと信頼性の低下」パターンは、document.getElementById() が期待どおりに動作することもあれば、期待どおりに動作しないこともあるため、ネイティブ メソッドのオーバーライドと少なくとも同じくらい悪いです。 大規模なプロジェクトでは、このような問題が 1 つ発生すると、多くの時間と費用が無駄になる可能性があります。

新しいメソッドはありません

JS で既存のオブジェクトにメソッドを追加するのは非常に簡単です。関数を作成し、それを既存のオブジェクトのプロパティに割り当てて、メソッドにするだけです。このアプローチでは、あらゆる種類のオブジェクトを変更できます。

// 不好的写法 - 在
DOM对象
上增加了方法document.sayImAwesome = function () {
  alert("You're awesome.");
}// 不好的写法 - 在原生对象上增加了方法Array.prototype.reverseSort = function () {  return this.sort().reverse();
}// 不好的写法 - 在库对象上增加了方法YUI.doSomething = function () {  // 代码}
ログイン後にコピー

オブジェクトにメソッドを追加できないようにすることは、ほぼ不可能です (ES5 には、これを行うための 3 つの新しいメソッドがあり、後で紹介します)。自分が所有していないオブジェクトにメソッドを追加すると大きな問題が発生し、名前の競合が発生する可能性があります。現時点でオブジェクトにメソッドがないからといって、将来もメソッドがないわけではありません。 さらに悪いことに、ネイティブ メソッドが将来自分のメソッドと一貫性のない動作をするようになった場合、コード メンテナンスの悪夢に陥ることになります。

プロトタイプ JS クラス ライブラリの開発履歴から学ぶ必要があります。 Prototypeは、さまざまなJSオブジェクトを変更するという観点から非常に有名です。 DOM とネイティブ オブジェクトに非常に自由にメソッドを追加します。実際、ライブラリのコードのほとんどは、自分で オブジェクトを作成するのではなく、既存のオブジェクトを拡張するものとして定義されています。 Prototype の開発者は、このライブラリを JS を補完するものとみなしています。 1.6 より前のバージョンでは、Prototype は document.getElementsByClassName() メソッドを実装します。このメソッドは HTML5 で正式に定義されており、Prototype の使用法が標準化されているため、ご存知の方もいるかもしれません。

Prototype の document.getElementsByClassName() メソッドは、指定された CSS クラス名の要素を含む配列を返します。また、Prototype は、配列に対してメソッド Array.prototype.each() を追加します。このメソッドは、配列を反復処理して各要素に対して関数を実行します。これにより、開発者は次のようなコードを書くことができます:

document.getElementsByClassName('selected').each(doSomething);
ログイン後にコピー

HTML5 がこのメソッドを標準化し、ブラウザがネイティブに実装し始めるまで、コードは問題ありません。 Prototype チームは、ネイティブ document.getElementsByClassName() が登場することを知っていたため、次のような防御的なコードを追加しました:

if (!document.getElementsByClassName) {  document.getElementsByClassName = function (classes) {    // 非原生实现
  };
}
ログイン後にコピー

つまり、Prototype は、document.getElementsByClassName() が存在しない場合に定義するだけです。これで問題は解決したように見えますが、別の重要な事実があります。HTML5 document.getElementsByClassName() は配列を返さないため、 each() メソッドはまったく存在しません。ネイティブ DOM メソッドは、NodeList と呼ばれる特殊なコレクション タイプを使用します。 document.getElementsByClassName() は、他の DOM メソッド呼び出しと一致する NodeList を返します。

document.getElementsByClassName() メソッドがブラウザーでネイティブに実装されている場合、NodeList には each() メソッドがないため、ネイティブであっても Prototype によって追加された each() メソッドであっても、JS エラーがトリガーされます実行中。その結果、プロトタイプ ユーザーはクラス ライブラリ コードのアップグレードと自分自身のコードの変更の両方を行う必要があり、これはまさにメンテナンスの悪夢です。

从Prototype的错误中可以学到,你不可能精确预测JS将来会如何变化。标准已经进化了,它们经常会从诸如Prototype这样的库代码中获得一些线索来决定下一代标准的新功能。事实上,原生的Array.prototype.forEach()方法在ECMAScript5有定义,它与Prototype的each()方法行为非常类似。问题是你不知道官方的功能与原生会有什么样的不同,甚至是微小的区别也将导致很大的问题。

大多数JS库代码有一个插件机制,允许为代码库安全地新增一些功能。如果想修改,最佳最可维护的方式是创建一个插件。

不删除方法

删除JS方法和新增方法一样简单。当然,覆盖一个方法也是删除已存在的方法的一种方式。最简单的删除一个方法的方式就是给对应的名字赋值为null。

// 不好的写法 - 删除了DOM方法document.getElementById = null;
ログイン後にコピー

将一个方法设置为null,不管它以前是怎么定义的,现在它已经不能被调用到了。如果方法是在对象的实例上定义的(相对于对象的原型而言),也可以使用delete操作符来删除。

var person = {  name: 'Nicholas'};delete person.name;console.log(person.name); // undefined
ログイン後にコピー

上例中,从person对象中删除了name属性。delete操作符只能对实例的属性和方法起作用。如果在prototype的属性或方法上使用delete是不起作用的。例如:

// 不影响delete document.getElementById;console.log(document.getElementById('myelement')); // 仍然能工作
ログイン後にコピー

因为document.getElementById()是原型上的一个方法,使用delete是无法删除的。但是,仍然可以用对其赋值为null的方式来阻止被调用。

无需赘述,删除一个已存在对象的方法是糟糕的实践。不仅有依赖那个方法的开发者存在,而且使用该方法的代码有可能已经存在了。删除一个在用的方法会导致运行时错误。如果你的团队不应该使用某个方法,将其标识为“废弃”,可以用文档或者用静态代码分析器。删除一个方法绝对应该是最后的选择。

反之,不删除你拥有对象的方法实际上是比较好的实践。从库代码或原生对象上删除方法是非常难的事情,因为第三方代码正依赖于这些功能。在很多案例中,库代码和浏览器都会将有bug或不完整的方法保留很长一段时间,因为删除它们以后会在数不胜数的网站上导致错误。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

web开发中如何避免空比较

为什么web开发中需要避免使用全局变量

以上がJS コードを保守する 3 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WeChatの友達を削除するにはどうすればよいですか? WeChatの友達を削除する方法 WeChatの友達を削除するにはどうすればよいですか? WeChatの友達を削除する方法 Mar 04, 2024 am 11:10 AM

WeChat は主流のチャット ツールの 1 つであり、WeChat を通じて新しい友人に出会ったり、古い友人に連絡したり、友人間の友情を維持したりすることができます。永遠に終わらない宴会など存在しないように、人間同士が仲良くなれば必ず意見の相違が生じます。ある人があなたの気分に極度に影響を与える場合、または仲良くなったときに意見が一致しないことがわかり、コミュニケーションが取れなくなった場合、WeChat の友人を削除する必要がある場合があります。 WeChatの友達を削除するにはどうすればよいですか? WeChat友達を削除する最初のステップ:WeChatメインインターフェースで[アドレス帳]をタップします; 2番目のステップ:削除したい友達をクリックして[詳細]を入力します; 3番目のステップ:上部の[...]をクリックします右隅; ステップ 4: 下の [削除] をクリックします; ステップ 5: ページのプロンプトを理解した後、[連絡先を削除] をクリックします;

トマト無料小説アプリで小説を書く方法. トマトノベルで小説を書く方法に関するチュートリアルを共有します。 トマト無料小説アプリで小説を書く方法. トマトノベルで小説を書く方法に関するチュートリアルを共有します。 Mar 28, 2024 pm 12:50 PM

トマト ノベルは非常に人気のある小説閲覧ソフトウェアです。トマト ノベルでは、新しい小説や漫画を読むことができます。どの小説も漫画もとても面白いです。小説を書きたい友達もたくさんいます。お小遣いを稼いで、小説の内容を編集することもできます。 「テキストに文章を書きたいです。それで、小説はどうやって書くのですか?友達は知らないので、一緒にこのサイトに行きましょう。小説の書き方の入門を少し見てみましょう。」 Tomato Novels を使用して小説を書く方法に関するチュートリアルを共有します。 1. まず、携帯電話で Tomato Free Novels アプリを開き、パーソナル センター - ライター センターをクリックします。 2. Tomato Writer Assistant ページに移動し、次の場所で [新しい本の作成] をクリックします。小説の終わり

Colorful マザーボードに BIOS を入力するにはどうすればよいですか? 2つの方法を教えます Colorful マザーボードに BIOS を入力するにはどうすればよいですか? 2つの方法を教えます Mar 13, 2024 pm 06:01 PM

Colorful マザーボードは中国国内市場で高い人気と市場シェアを誇っていますが、Colorful マザーボードのユーザーの中には、設定のために BIOS を入力する方法がまだ分からない人もいます。この状況に対応して、編集者はカラフルなマザーボード BIOS に入る 2 つの方法を特別に提供しました。ぜひ試してみてください。方法 1: U ディスク起動ショートカット キーを使用して、U ディスク インストール システムに直接入ります。ワンクリックで U ディスクを起動する Colorful マザーボードのショートカット キーは ESC または F11 です。まず、Black Shark インストール マスターを使用して、Black Shark インストール マスターを作成します。 Shark U ディスク起動ディスクを選択し、コンピュータの電源を入れます。起動画面が表示されたら、キーボードの ESC キーまたは F11 キーを押し続けて、起動項目を順次選択するウィンドウに入ります。「USB」の場所にカーソルを移動します。 」と表示され、その後

WeChat で削除された連絡先を回復する方法 (簡単なチュートリアルでは、削除された連絡先を回復する方法について説明します) WeChat で削除された連絡先を回復する方法 (簡単なチュートリアルでは、削除された連絡先を回復する方法について説明します) May 01, 2024 pm 12:01 PM

残念ながら、WeChat は広く使用されているソーシャル ソフトウェアであり、何らかの理由で特定の連絡先を誤って削除してしまうことがよくあります。ユーザーがこの問題を解決できるように、この記事では、削除された連絡先を簡単な方法で取得する方法を紹介します。 1. WeChat の連絡先削除メカニズムを理解します。これにより、削除された連絡先を取得できるようになります。WeChat の連絡先削除メカニズムでは、連絡先がアドレス帳から削除されますが、完全には削除されません。 2. WeChat の組み込みの「連絡先帳復元」機能を使用します。WeChat には、この機能を通じて以前に削除した連絡先をすばやく復元できる「連絡先帳復元」機能が用意されています。 3. WeChat 設定ページに入り、右下隅をクリックし、WeChat アプリケーション「Me」を開き、右上隅にある設定アイコンをクリックして設定ページに入ります。

携帯電話の文字サイズの設定方法(携帯電話の文字サイズを簡単に調整できます) 携帯電話の文字サイズの設定方法(携帯電話の文字サイズを簡単に調整できます) May 07, 2024 pm 03:34 PM

携帯電話が人々の日常生活において重要なツールになるにつれて、フォント サイズの設定は重要なパーソナライゼーション要件になりました。さまざまなユーザーのニーズを満たすために、この記事では、簡単な操作で携帯電話の使用体験を向上させ、携帯電話のフォントサイズを調整する方法を紹介します。携帯電話のフォント サイズを調整する必要があるのはなぜですか - フォント サイズを調整すると、テキストがより鮮明で読みやすくなります - さまざまな年齢のユーザーの読書ニーズに適しています - フォント サイズを使用すると、視力の悪いユーザーにとって便利です携帯電話システムの設定機能 - システム設定インターフェイスに入る方法 - 設定インターフェイスで「表示」オプションを見つけて入力します。 - 「フォント サイズ」オプションを見つけて、サードパーティでフォント サイズを調整します。アプリケーション - フォント サイズの調整をサポートするアプリケーションをダウンロードしてインストールします - アプリケーションを開いて、関連する設定インターフェイスに入ります - 個人に応じて

Win11で管理者権限を取得する方法まとめ Win11で管理者権限を取得する方法まとめ Mar 09, 2024 am 08:45 AM

Win11 管理者権限の取得方法のまとめ. Windows 11 オペレーティング システムでは、管理者権限は、ユーザーがシステム上でさまざまな操作を実行できるようにする非常に重要な権限の 1 つです。ソフトウェアのインストールやシステム設定の変更など、一部の操作を完了するために管理者権限の取得が必要になる場合があります。以下にWin11の管理者権限を取得する方法をまとめましたので、お役に立てれば幸いです。 1. ショートカット キーを使用する Windows 11 システムでは、ショートカット キーを使用してコマンド プロンプトをすばやく開くことができます。

モバイルドラゴンの卵を孵化させる秘密が明らかに(モバイルドラゴンの卵をうまく孵化させる方法を段階的に教えます) モバイルドラゴンの卵を孵化させる秘密が明らかに(モバイルドラゴンの卵をうまく孵化させる方法を段階的に教えます) May 04, 2024 pm 06:01 PM

テクノロジーの発展に伴い、モバイルゲームは人々の生活に欠かせないものになりました。かわいいドラゴンエッグの画像と面白い孵化過程で多くのプレイヤーの注目を集めており、その中でも注目を集めているゲームの一つがモバイル版ドラゴンエッグです。プレイヤーがゲーム内で自分のドラゴンをより適切に育成し成長させることができるように、この記事ではモバイル版でドラゴンの卵を孵化させる方法を紹介します。 1. 適切な種類のドラゴン エッグを選択する プレイヤーは、ゲーム内で提供されるさまざまな種類のドラゴン エッグの属性と能力に基づいて、自分に適したドラゴン エッグの種類を慎重に選択する必要があります。 2. 孵化機のレベルをアップグレードします。プレイヤーはタスクを完了し、小道具を収集することで孵化機のレベルを向上させる必要があります。孵化機のレベルは孵化速度と孵化成功率を決定します。 3. プレイヤーはゲームに参加する必要がある孵化に必要なリソースを収集します。

Oracleバージョンの問い合わせ方法の詳細説明 Oracleバージョンの問い合わせ方法の詳細説明 Mar 07, 2024 pm 09:21 PM

Oracleバージョンのクエリ方法を詳しく解説 Oracleは、世界で最も人気のあるリレーショナルデータベース管理システムの1つで、豊富な機能と強力なパフォーマンスを提供し、企業で広く使用されています。データベースの管理と開発のプロセスでは、Oracle データベースのバージョンを理解することが非常に重要です。この記事では、Oracle データベースのバージョン情報をクエリする方法と具体的なコード例を詳しく紹介します。単純な SQL ステートメントを実行して、Oracle データベース内の SQL ステートメントのデータベース バージョンをクエリします。

See all articles