JavaScript prototype属性使用説明
3894 ワード
この点はちょっと乱れて聞こえるかもしれません.焦らないでください.この特殊な方法について実例を通して説明します.
まず、まずクラスの概念を理解したいです.JavaScript自体は対象に向けた言語です.その関連要素はその属性によって、特定の種類に依存します.私たちの一般的なクラスは、配列変数(Aray)、論理変数(Boolean)、日付変数(Date)、構造変数(Function)、数値変数(Number)、オブジェクト変数(Object)、文字列変数(String)などがありますが、関連する種類の方法は、プログラマーがよく使う(ここではクラスの注意と属性の出し方を区別します).日付のgetシリーズの方法、文字列のsplit方法など、
しかし、実際のプログラミングの過程で、既存の方法の不足を感じましたか?prototype方法が生まれました.以下、実例を通してprototypeの具体的な使い方を詳しく説明します.
1、最も簡単な例で、prototypeを知る:
(1)Number.add(num):作用、数字加算
実現方法:Number.prototype.add=function(num){return(this+num);
試験:alert((3).add(15)->表示18
(2)Boolean.rev():作用、ブール変数の逆
実現方法:Boolean.prototype.rev=function(){return];
テスト:alert((true).rev()->falseを表示する
簡単ですか?この一節はただ読者にこのような方法があることを教えているだけで、この方法はこのように運用されている.
2、既存の方法の実現と強化、プロトタイプを初めて知る:
(1)Aray.push(newuuelement)
役割:配列の最後に新しい要素を追加します.
実現方法:
実現方法:
(2)String.length
作用:これは実際にはString類の属性の一つですが、JavaScriptは全角、半角を一つの文字として認識していますので、実際の運用においては一定の問題が発生する可能性があります.今はprototypeを通じてこの不足を補います.
実現方法:
String.prototype.cnLength=function()
var arr=this.match(/^\x 00-\xff)/ig;
return this.length+(arr==null?0:arr.length);
)
試験:alert("EaseWe空間Spaces".cnLength()->表示16
ここでは正規表現の方法と全角文字の符号化原理が用いられています.他の2つの比較的大きなカテゴリに属していますので、ここでは説明を加えずに関連する資料を参照してください.
3、新機能の実現、prototypeに深く入る:実際にプログラミングする中で使ったのは確かに既存の方法の強化だけではなく、より多く実行する機能の要求、以下はprototypeで実際の問題を解決する二つの例を挙げます.
(1)Stering.left()
問題:vbを使ったことがあるなら、すべてのleft関数を知っていて、文字列の左側からn文字を取りますが、足りないのは全角、半角をすべて1文字と見なして、中国語と英語が混じって並んでいる紙面で等長の文字列を切り取ることができません.
役割:文字列の左側からn文字を切り取り、全角半角文字の区別をサポートします.
実現方法:
alert(「EaseWe空間Spaces」.left(8)->EaseWe空間を表示する
alert("EaseWe空間Spaces".left(8,true)->EaseWe空を表示します.
この方法は上に述べたStering.Tlength()の方法を使って、ユーザー定義の方法の間でもいくつかの良い新しい方法を組み合わせることができます.
(2)Date.DayDiff()
作用:2つの日付型変数の間隔(年、月、日、週)を計算します.
実現方法:
alert((new Date).DayDiff((new Date(2002,0,1)),"m")->表示10
もちろん、更に拡充して、応答の時間、分、あるいは秒を導出することもできます.
(3)Number.fact()
作用:ある数字の階乗
実現方法:
この方法は主に再帰的な方法がprototype方法でも可能であることを説明しています.
まず、まずクラスの概念を理解したいです.JavaScript自体は対象に向けた言語です.その関連要素はその属性によって、特定の種類に依存します.私たちの一般的なクラスは、配列変数(Aray)、論理変数(Boolean)、日付変数(Date)、構造変数(Function)、数値変数(Number)、オブジェクト変数(Object)、文字列変数(String)などがありますが、関連する種類の方法は、プログラマーがよく使う(ここではクラスの注意と属性の出し方を区別します).日付のgetシリーズの方法、文字列のsplit方法など、
しかし、実際のプログラミングの過程で、既存の方法の不足を感じましたか?prototype方法が生まれました.以下、実例を通してprototypeの具体的な使い方を詳しく説明します.
1、最も簡単な例で、prototypeを知る:
(1)Number.add(num):作用、数字加算
実現方法:Number.prototype.add=function(num){return(this+num);
試験:alert((3).add(15)->表示18
(2)Boolean.rev():作用、ブール変数の逆
実現方法:Boolean.prototype.rev=function(){return];
テスト:alert((true).rev()->falseを表示する
簡単ですか?この一節はただ読者にこのような方法があることを教えているだけで、この方法はこのように運用されている.
2、既存の方法の実現と強化、プロトタイプを初めて知る:
(1)Aray.push(newuuelement)
役割:配列の最後に新しい要素を追加します.
実現方法:
Array.prototype.push = function(new_element){
this[this.length]=new_element;
return this.length;
}
彼をさらに強化して、一度に複数の要素を増やすことができます.実現方法:
Array.prototype.pushPro = function() {
var currentLength = this.length;
for (var i = 0; i < arguments.length; i++) {
this[currentLength + i] = arguments[i];
}
return this.length;
}
分かりやすくないですか?これを類推して、どのようにAray.popを強化することによって任意の位置を削除するかを考えてもいいです.(2)String.length
作用:これは実際にはString類の属性の一つですが、JavaScriptは全角、半角を一つの文字として認識していますので、実際の運用においては一定の問題が発生する可能性があります.今はprototypeを通じてこの不足を補います.
実現方法:
String.prototype.cnLength=function()
var arr=this.match(/^\x 00-\xff)/ig;
return this.length+(arr==null?0:arr.length);
)
試験:alert("EaseWe空間Spaces".cnLength()->表示16
ここでは正規表現の方法と全角文字の符号化原理が用いられています.他の2つの比較的大きなカテゴリに属していますので、ここでは説明を加えずに関連する資料を参照してください.
3、新機能の実現、prototypeに深く入る:実際にプログラミングする中で使ったのは確かに既存の方法の強化だけではなく、より多く実行する機能の要求、以下はprototypeで実際の問題を解決する二つの例を挙げます.
(1)Stering.left()
問題:vbを使ったことがあるなら、すべてのleft関数を知っていて、文字列の左側からn文字を取りますが、足りないのは全角、半角をすべて1文字と見なして、中国語と英語が混じって並んでいる紙面で等長の文字列を切り取ることができません.
役割:文字列の左側からn文字を切り取り、全角半角文字の区別をサポートします.
実現方法:
String.prototype.left = function(num,mode){
if(!/\d+/.test(num))return(this);
var str = this.substr(0,num);
if(!mode) return str;
var n = str.Tlength() - str.length;
num = num - parseInt(n/2);
return this.substr(0,num);
}
テスト:alert(「EaseWe空間Spaces」.left(8)->EaseWe空間を表示する
alert("EaseWe空間Spaces".left(8,true)->EaseWe空を表示します.
この方法は上に述べたStering.Tlength()の方法を使って、ユーザー定義の方法の間でもいくつかの良い新しい方法を組み合わせることができます.
(2)Date.DayDiff()
作用:2つの日付型変数の間隔(年、月、日、週)を計算します.
実現方法:
Date.prototype.DayDiff = function(cDate,mode){
try{
cDate.getYear();
}catch(e){
return(0);
}
var base =60*60*24*1000;
var result = Math.abs(this - cDate);
switch(mode){
case "y":
result/=base*365;
break;
case "m":
result/=base*365/12;
break;
case "w":
result/=base*7;
break;
default:
result/=base;
break;
}
return(Math.floor(result));
}
試験:alert((new Date).DayDiff((new Date(2002,0,1))))->表示329alert((new Date).DayDiff((new Date(2002,0,1)),"m")->表示10
もちろん、更に拡充して、応答の時間、分、あるいは秒を導出することもできます.
(3)Number.fact()
作用:ある数字の階乗
実現方法:
Number.prototype.fact=function(){
var num = Math.floor(this);
if(num<0)return NaN;
if(num==0 || num==1)
return 1;
else
return (num*(num-1).fact());
}
試験:alert((4).fact()->表示24この方法は主に再帰的な方法がprototype方法でも可能であることを説明しています.