導入
この記事で紹介したモードのいくつかは、主に初期化とパフォーマンスの改善に使用される初期化モードとパフォーマンスモードと呼ばれます。いくつかのモードが以前に言及されているので、ここに概要があります。
すぐに実行される関数
このシリーズの第4章「Nowと呼ばれる関数式」という章では、同様の機能について詳しく説明しました。ここでは、要約する2つの簡単な例を示します。
コードコピーは次のとおりです。
//関数を宣言した後、すぐに関数を実行します
(関数 () {
console.log( 'witch out!');
}());
//この方法で宣言された関数はすぐに実行することもできます
!関数 () {
console.log( 'witch out!');
}();
//次の方法も問題ありません
〜function(){ / * code * /}();
-function(){ / * code * /}();
+function(){ / * code * /}();
すぐにオブジェクトの初期化を実行しました
このパターンは、オブジェクトが宣言されている場合(関数ではなく)、オブジェクト内のメソッドの1つがすぐに実行され、初期化作業を実行することを意味します。通常、このパターンは、一度に実行されたコードで使用できます。
コードコピーは次のとおりです。
({
//ここでは、定数を定義して他の値を設定できます
MaxWidth:600、
maxheight:400、
//もちろん、ユーティリティメソッドを定義することもできます
gimmemax:function(){
this.maxwidth + "x" + this.maxheightを返します。
}、
//初期化
init:function(){
console.log(this.gimmemax());
//その他のコード...
}
})。init(); //これは初期化を開始します
ブランチの初期化
ブランチの初期化とは、さまざまな条件(シナリオ)に従って異なるコードの初期化を指します。これは、いわゆる条件付きステートメントの割り当てです。以前は、イベント処理を行っていたとき、通常、次のようなコードを使用しました。
コードコピーは次のとおりです。
var utils = {
addListener:function(el、type、fn){
if(typeof windof.addeventlistener === 'function'){
El.AddeventListener(Type、FN、False);
} else if(typeof document.attachevent!== 'undefined'){
el.Attachevent( 'on' + type、fn);
} それ以外 {
el ['on' + type] = fn;
}
}、
removelistener:function(el、type、fn){
}
};
それを改善しましょう。まず、2つのインターフェイスを定義する必要があります。1つはイベントハンドルを追加し、もう1つはイベントハンドルを削除するためです。コードは次のとおりです。
コードコピーは次のとおりです。
var utils = {
addListener:null、
Removelistener:null
};
実装コードは次のとおりです。
コードコピーは次のとおりです。
if(typeof windof.addeventlistener === 'function'){
utils.addlistener = function(el、type、fn){
El.AddeventListener(Type、FN、False);
};
} else if(typeof document.attachevent!== 'undefined'){// ie
utils.addlistener = function(el、type、fn){
el.Attachevent( 'on' + type、fn);
};
utils.removelistener = function(el、type、fn){
el.detachevent( 'on' + type、fn);
};
} else {//他の古いブラウザ
utils.addlistener = function(el、type、fn){
el ['on' + type] = fn;
};
utils.removelistener = function(el、type、fn){
el ['on' + type] = null;
};
}
使用するのはとても便利ではありませんか?コードははるかにエレガントです。
自己宣言機能
一般に、同じ名前の関数コードは、次のような関数内で書き換えられます。
コードコピーは次のとおりです。
var scareme = function(){
アラート( "boo!");
scarme = function(){
アラート( "double boo!");
};
};
この種のコードは非常に混乱しています。まず、例の実行結果を見てみましょう。
コードコピーは次のとおりです。
// 1。新しい属性を追加します
scarme.property = "適切";
//2。Scaremeは新しい値を割り当てます
var prank = scarme;
//3。メソッドとして呼び出します
var Spooky = {
ブー:scarme
};
//新しい変数名で呼び出します
prank(); //「ブー!」
prank(); //「ブー!」
console.log(prank.property); // "きちんと"
//メソッドを使用して呼び出します
spooky.boo(); //「ブー!」
spooky.boo(); //「ブー!」
console.log(spooky.boo.property); // "きちんと"
実行結果を通じて、関数を新しい変数(または内部メソッド)に割り当てることで、コードは過負荷のSCARMEコードを実行しないことがわかります。次の例はまったく逆です。
コードコピーは次のとおりです。
//自己宣言関数を使用します
scarme(); //ダブルブー!
scarme(); //ダブルブー!
console.log(scareme.property); // 未定義
このモデルを使用する場合、非常に注意する必要があります。そうしないと、実際の結果は、予想される結果とは異なる場合があります。もちろん、このスペシャルを使用して特別な事業を行うこともできます。
メモリの最適化
このパターンは、主に関数の属性特性を使用して、多数の繰り返し計算を回避します。通常のコードフォームは次のとおりです。
コードコピーは次のとおりです。
var myfunc = function(param){
if(!myfunc.cache [param]){
var result = {};
// ...複雑な操作...
myfunc.cache [param] = result;
}
myfunc.cache [param]を返します。
};
//ストレージをキャッシュします
myfunc.cache = {};
ただし、上記のコードには問題があります。渡されたパラメーターがToStringまたはオブジェクトと同様のいくつかの一般的な方法である場合、問題が発生します。現時点では、伝説的なHasownPropertyメソッドを使用する必要があります。コードは次のとおりです。
コードコピーは次のとおりです。
var myfunc = function(param){
if(!myfunc.cache.hasownproperty(param)){
var result = {};
// ...複雑な操作...
myfunc.cache [param] = result;
}
myfunc.cache [param]を返します。
};
//ストレージをキャッシュします
myfunc.cache = {};
または、複数のパラメーターを渡す場合は、JSONのStringifyメソッドを使用して、ストレージ用のCacheKey値を作成できます。コードは次のとおりです。
コードコピーは次のとおりです。
var myfunc = function(){
var cachekey = json.stringify(array.prototype.slice.call(arguments))、
結果;
if(!myfunc.cache [cachekey]){
result = {};
// ...複雑な操作...
myfunc.cache [cachekey] = result;
}
myfunc.cache [cachekey]を返します。
};
//ストレージをキャッシュします
myfunc.cache = {};
または複数のパラメーターでは、引数を使用することもできます。Callee機能:
コードコピーは次のとおりです。
var myfunc = function(param){
var f = arguments.callee、
結果;
if(!f.cache [param]){
result = {};
// ...複雑な操作...
f.cache [param] = result;
}
f.cache [param]を返します。
};
//ストレージをキャッシュします
myfunc.cache = {};
要約します
要約する必要はありません、コードを注意深く見てください