ホームページ ウェブフロントエンド jsチュートリアル JavaScript の機能を拡張する正しい方法 (翻訳)_JavaScript のヒント

JavaScript の機能を拡張する正しい方法 (翻訳)_JavaScript のヒント

May 16, 2016 pm 05:54 PM

今朝、記事 「JavaScript Weekly Introduction」[第 3 号]を見て、その中に記事 (JavaScript の拡張 – 正しい方法) を見つけました。かなり良いです、翻訳してください。この記事は一語一語翻訳されていません。できるだけ理解しやすいように努めています。

元のアドレス: Extending JavaScript – The Right Way

以下は翻訳です

JavaScript には多くの強力なメソッドが組み込まれています。しかし、必要な特定の関数が組み込みメソッドで利用できない場合があります。どうすれば JavaScript 関数をエレガントに拡張できますか?
たとえば、最初の文字を大文字にするために Capitalize() メソッドを追加したいとします。通常、次のように記述します。

コードをコピー コードは次のとおりです:

if(!String.prototype.capitalize)
{
String.prototype.capitalize = function()
{
return this.slice(0, 1).toUpperCase() this.slice(1).toLowerCase();
}
}

上記のコードは通常通り使用できますが、コード:
コードをコピー コードは次のとおりです:

var strings = "やった";
for(i in strings) console.log(i ":" strings[i]);

得られる結果は次のとおりです:
0: y
1: a
2: y
capitalize: function () { return this.slice(0, 1).toUpperCase() this.slice(1).toLowerCase() }
Thisは明らかに私たちが望む結果ではありませんが、追加したメソッドが出力される理由は、追加したメソッドの enumerable 属性がデフォルトで true に設定されているためです。
列挙プロパティ (enumerable) を false に設定し、defineProperty メソッドを使用して機能を拡張するだけで、この問題を回避できます。
コードをコピー コードは次のとおりです:

if(!String.prototype.capitalize)
{
Object.defineProperty(String.prototype, 'capitalize', {
値: function()
{
return this.slice(0,1).toUpperCase() this.slice(1).toLowerCase();
},
列挙可能: false
});
}

次に、このコードを再度実行します:

コードをコピーします コードは次のとおりです:
var strings = "yay";
for(i in strings) console.log(i ":" strings[i]); 🎜>

得られる結果は次のとおりです:
0: y
1: a
2: y
ループを介した出力の欠如は意味しないことに注意してください。次のコードの定義を参照してください:


コードをコピー コードは次のとおりです。 🎜> var strings = "yay ";
console.log(strings.capitalize)


出力:


コードをコピー コードは次のとおりです: function () { return this.slice(0, 1).toUpperCase() this.slice( 1).toLowerCase(); }

この方法を使用して JavaScript 関数を拡張し、独自のオブジェクトを定義し、いくつかのデフォルト値を設定できます。
以下は、独自のプロジェクトで使用できる他の拡張メソッドです。
String.pxToInt()
「200px」のような文字列を数値 200 に変換します。



コードをコピー コードは次のとおりです: if(!String.prototype.pxToInt)
{
Object .defineProperty(String.prototype, 'pxToInt',
{
value: function()
{
return parseInt(this.split('px')[0]);
} 、
列挙可能: false
});
}


String.isHex()
文字列が「#CCC」や「#CACACA」などの 16 進数で表現されているかどうかを判断します
コードをコピー コードは次のとおりです:

if(!String.prototype.isHex)
{
Object.defineProperty(String.prototype, 'isHex',
{
value: function()
{
return this.substring(0,1) == '#' &&
(this.length == 4 || this.length = = 7) &&
/^[0-9a-fA-F] $/.test(this.slice(1))
},
列挙可能: false
}; > }

String.reverse()
文字列反転:

コードをコピー コードとして
if(!String.prototype.reverse)
{
Object.defineProperty(String.prototype, 'reverse',
{
value: function( )
{
return this.split( '' ).reverse().join( '' );
},
列挙可能: false
}); >

String.wordCount()
スペースで区切って単語の数をカウントします



コードをコピーコードは次のとおりです: if(!String.prototype.wordCount)
{
Object.defineProperty(String.prototype, 'wordCount',
{
値: function()
{
return this.split(' ').length;
},
列挙可能: false
});
String.htmlEntities()




などの HTML タグは特殊文字としてエンコードされます。 > コードは次のとおりです:

if(!String.prototype.htmlEntities) { Object.defineProperty(String.prototype, 'htmlEntities', { value: function() { return String(this).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); },
列挙可能: false
});
}


String.stripTags()
HTML タグを削除します:




コードをコピーします

コードは次のとおりです:


if(!String.prototype.stripTags)
{ Object.defineProperty(String.prototype, 'stripTags', { value: function() { return this.replace(/] >/gi, ''); } ,
enumerable: false
});
}


String.trim()
先頭と末尾のスペース:




コードをコピー

コードは次のとおりです。


if(!String.prototype .trim)
{ Object.defineProperty(String.prototype, 'trim', { value: function() { return this.replace(/^s* /, "").replace(/s*$/, ""); },
列挙可能: false
});
}


文字列。 tripNonAlpha()
アルファベット以外の文字を削除します:




コードをコピー

コードは次のとおりです:


if(!String.prototype.stripNonAlpha)
{ Object.defineProperty (String.prototype, 'stripNonAlpha', { value: function() { return this.replace(/[^A-Za-z ] /g, ""); 列挙可能: false
}); > Object.sizeof()
{one: “and”, two: "and"} などのオブジェクトのサイズをカウントします




コードをコピー


コードは次のとおりです。


if(!Object .prototype.sizeof)
{
Object.defineProperty(Object.prototype, 'sizeof' ,
{
value: function()
{
var counter = 0; for(this) counter ; return counter;列挙可能: false }) }

この方法で JS ネイティブ オブジェクトの関数を拡張するのは非常に良いことですが、必要な場合 (プロジェクトで頻繁に使用される場合) を除き、ネイティブ オブジェクトの関数を直接拡張することはお勧めできません。グローバル変数が発生するためです。汚染。
また、記事内の pxToInt() メソッドは必要ありません。JS の parseInt() でこのような関数を直接完了できます: parsetInt("200px")===200
には問題があるようです。 htmlEntities メソッドをもう 1 つ提供します:
コードをコピーします コードは次のとおりです:

if(!String.prototype.htmlEntities)
{
Object.defineProperty(String.prototype, 'htmlEntities',
{
value: function()
{
var div = document.createElement("div");
if(div.textContent){
div.textContent=this;
else{
div.innerText=this; }
return div.innerHTML;
},
列挙可能: false
});
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

JavaScriptの文字列文字を交換します JavaScriptの文字列文字を交換します Mar 11, 2025 am 12:07 AM

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

8見事なjQueryページレイアウトプラグイン 8見事なjQueryページレイアウトプラグイン Mar 06, 2025 am 12:48 AM

楽なWebページレイアウトのためにjQueryを活用する:8本質的なプラグイン jQueryは、Webページのレイアウトを大幅に簡素化します。 この記事では、プロセスを合理化する8つの強力なjQueryプラグイン、特に手動のウェブサイトの作成に役立ちます

独自のAjax Webアプリケーションを構築します 独自のAjax Webアプリケーションを構築します Mar 09, 2025 am 12:11 AM

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

10 jQueryの楽しみとゲームプラグイン 10 jQueryの楽しみとゲームプラグイン Mar 08, 2025 am 12:42 AM

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? 独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

Ajaxを使用して動的にボックスコンテンツをロードします Ajaxを使用して動的にボックスコンテンツをロードします Mar 06, 2025 am 01:07 AM

このチュートリアルでは、Ajaxを介してロードされた動的なページボックスの作成を示しており、フルページのリロードなしでインスタントリフレッシュを可能にします。 JQueryとJavaScriptを活用します。カスタムのFacebookスタイルのコンテンツボックスローダーと考えてください。 重要な概念: ajaxとjquery

jQuery Parallaxチュートリアル - アニメーションヘッダーの背景 jQuery Parallaxチュートリアル - アニメーションヘッダーの背景 Mar 08, 2025 am 12:39 AM

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

JavaScript用のクッキーレスセッションライブラリを作成する方法 JavaScript用のクッキーレスセッションライブラリを作成する方法 Mar 06, 2025 am 01:18 AM

このJavaScriptライブラリは、Cookieに依存せずにセッションデータを管理するためにWindow.nameプロパティを活用します。 ブラウザ全体でセッション変数を保存および取得するための堅牢なソリューションを提供します。 ライブラリは、セッションの3つのコア方法を提供します

See all articles