インターフェイスの継承 コードの最適化についての考察
まず、優れたコードの共通性を実現するための、非常に優れた JS プログラミングのヒントだと思うことを共有させてください。 多くの JS ライブラリはネイティブ オブジェクトに対して直接プロトタイプの拡張を実行するため、これは非常に悪い習慣であり、新しいインスタンス オブジェクトごとにメモリ消費量が増加するだけでなく、有害な誤解 (そのようなものがあるという考え) を引き起こしやすくなります。これは、JS ライブラリを構築するためのガイドラインでもあります。特にルートレベルのオブジェクトの場合、プロトタイプ拡張機能はできるだけ少なくしてください。
JS データベース構築ガイドライン
JS データベース構築ガイドライン (Dean Edwards の Base2 開発時の経験) 翻訳版: http://biaoge.me/2009/12/239 js ライブラリの構築について学ぶには: http://ejohn.org/blog/building-a-javascript-library/ 時間があれば、css3 を含む js ライブラリの構築に関する超最先端のドキュメントをご覧ください。最新のブラウザ API (querySelector など) build-a-javascript-framework
継承を使用してコードの共通性を向上させます
ネイティブ オブジェクト、外部名前空間に拡張されないため、が必要であり、このオブジェクトには外部呼び出し用のインターフェイスがいくつかありますが、js ライブラリ自体の堅牢性を向上させるために、外部インターフェイスを最小限に抑える必要があります (理想は、ユーザーが必要とするインターフェイスのみを保存することです) ! ここに問題があるので、インスタンス化してみましょう:
var namespace={
IOfirst:function(){},
IOsecond:function(){}
}
オブジェクト名前空間の下に次のものがあります。このインターフェイスを公開せずに IOfirst に渡す必要があります。IOSecond と共有されます。 すべての外部インターフェイスを継承を通じて親インターフェイスでラップし、init メソッドの下で均一に値を割り当てます。init メソッドでは、クロージャの役割により、コードの共通化が実現されます。 特定のメソッド:
コードの柔軟性を高めるために外部インターフェイスを動的に追加します
addIO:function(str){
var arrs = str.split("."),
o = this; == " Date$") 1 : 0; i0)
{
var data=arrs[0]
o[arrs[i]]=o[arrs[i]] ||function( ){return this.parIO.apply(null,[data,arguments])};
o=o[arrs[i]]
}
}
InitFuns:function(){
var that=this;
var funs=this.actionFun;
//すべての関数の初期化インターフェイス (テストは成功しました)
varinterfaces=["testLeap","disDayNum","todayBetween", "getMonthByDay" ,"getNextWeekByDay","getWeekByDay","newDate","compareDate"]
var shift;
do{
shift=interfaces.shift()
that.addIO(shift) ;
funs[shift]=function(){};
}while(interfaces.length>0)
// ブラウザ用の共通オブジェクトと変数を設定
🎜>var br={
ie:false,//IE6~8
ff:false,//Firefox
ch:false//Chrome
}
var nav=navigator.userAgent ;
if(!-[1,]) br.ie=true;
else if(nav.indexOf("Firefox")>0)
else if(nav) .indexOf( "Chrome")>0) br.ch=true;
//IO の設定を続行します
}
初期化されたインターフェースをコンソールに出力します:
すべての外部インターフェースが parIO にバインドされるため、インターフェースが多い場合でも多くのコードを節約できます。 ParIO は内部ハブと外部ハブを維持するための鍵であり、サブインターフェースの検索、パラメーターの受け渡し、
if(Date$.actionFun[arguments[0]])
{
varcustomFun=Date $.actionFun[arguments[0]]
returncustomFun.apply(null,[arguments[1]]);
else
console&&cosnole.log("empty");
3 つの部分があることがわかります:
//set the common object and variable, では、ブラウザの判断などのパブリック関数と変数を書くことができます、同様のバックグラウンド sqlHelp 関数を追加し、次に初期化インターフェイスを追加します。 ここで:
コードをコピーします
funs.getWeekByDay=function(){
return getWeekByDay( argument[0][0]);
}
funs .getNextWeekByDay=function(){
var speDate=formatDate(arguments[0][0]); getDate() 7);
getWeekByDay(speDate);
}
これのもう 1 つの利点は、インターフェイスの内部接続が非常に強力であるため、コードが他人にコピーされたり、不用意に使用されたりすることがないことです。たとえば、funs.getWeekByDay と funs.getNextWeekByDay は、上記の getWeekByDay() メソッドを共有します。 最後に、私の未熟な JS ライブラリとインターフェイス宣言を添付します。ダニエルが改善に協力してくれることを願っています。
/*
//関数: 2 つの日付を比較し、情報を返します "equal"/"more"/"less"
//arguments num :2
//引数の型: Date,Date
//引数の宣言:1.比較する必要があるターゲット オブジェクト(Subtrahend);2.比較オブジェクト(Minuend)
//データを返す - - タイプ: String ; 3 つの値: "more" (ターゲットが大きい場合)、"equal" (ターゲットが比較対象のオブジェクトと等しい場合)、"less" (ターゲットが小さい場合)
compareDate:function (objDate,comDate) )
{
},
//関数: 文字列を Date にフォーマットし、返します。
// 引数 num:1
// 引数の種類: このインターフェイスではオーバーロードが適用されます。したがって、文字列または日付が許可されています
//引数宣言: String を渡す場合、「2008/」のように「YYYY-MM-DD」または「YYYY/MM/DD」または「YYYY:MM:DD」にフォーマットする必要があります。 10/12"
//return date : type:Date;one value:formatting後の日付
newDate :function (str)
{
},
//function:渡した日付の週の開始日と終了日を取得し、{startDay,endDay} を含む Json を返します
//arguments num:1
//arguments type:このインターフェイスの場合、オーバーロードに適用されます。したがって、文字列または日付が許可されます
//引数の宣言: 今週の最初の日と最後の日を取得したい日。 String を渡す場合は、「YYYY-MM-DD」または「YYYY」の形式にする必要があります。 /MM/DD " または "YYYY:MM:DD" like "2008/10/12"
//データを返す --type :Json ; 1 つの値:{startDay:"",endDay:""} 、あなたvar.startDay(var はカスタム変数) で取得できます。
getWeekByDay :function (day)
{
},
//function:次の週の開始日と終了日を取得します。渡した日付を返し、{startDay,endDay} を含む Json を返します
//arguments num:1
//arguments type:このインターフェイスではオーバーロードが適用されるため、文字列または日付が許可されます
//引数の宣言: 今週の最初の日と最後の日を取得したい日。 String を渡す場合は、「YYYY-MM-DD」または「YYYY/MM/DD」または「YYYY:MM:」にフォーマットする必要があります。 DD" like " 2008/10/12"
//return data--type:Json; one value:{startDay:"",endDay:""} 、var.startDay(var はあなたのカスタム変数)
getNextWeekByDay :function (day)
{
}
//function:渡した日付の月の開始日と終了日を取得し、{ を含む Json を返します。 startDay,endDay}
//arguments num:1
//arguments type:Date
//arguments 宣言: 今月の最初の日と最後の日を取得したい日
/ /return data- -type :Json ; 1 つの値:{startDay:"",endDay:""} 、var.startDay(var はカスタム変数) で取得できます
getMonthByDay :function (day)
{
},
//function:渡してブール値で返す 2 つの日付の間に今日が含まれているかどうかをテストします
//arguments num:2
//arguments type:Date,Date
// 引数の宣言: プロシージャは大きい方をテストし、自動的にソートするため、順序は関係ありません
//データを返す -- 型: boolean ; 今日が 2 つの日付の間にある場合は 1 つの値 : true
todayBetween :function ( startDate,endDate)
{
},
//function:2 つの日付の差を日数で計算します
//arguments num:2
//arguments type: Date,Date
//引数宣言:1.startDate(削減されるもの) 2.endDate(削減されるもの)
//データを 1 つ返します--type:Number; これら 2 つの値の違い日付
disDayNum:function (startDate,endDate)
{
},
//function:閏を過ぎたかどうかをテストし、ブール値で返します
//引数num:1
//引数の種類: このインターフェイスではオーバーロードが適用されるため、文字列または日付が許可されます
//引数の宣言: String を渡す場合は、「YYYY-MM-DD」または「 YYYY/MM/ DD" または "YYYY:MM:DD" like "2008/10/12"
//データを返す -- type:boolean ;1 つの値: 閏年の場合は true、false
testLeap :function (date )
{
} */
ダウンロードへようこそ:
Date$.js