javascriptの最も基本的な関数のまとめ
16506 ワード
初期のJavaScriptを覚えています.何かを完成するには簡単な関数があまり回りません.ブラウザの提供者が機能に違いがあります.エッジ機能だけでなく、基本機能も同じです.addEventListenerとatachEventのように.時代は変わっていますが、いくつかの関数は各開発者が身につけなければなりません.いくつかの機能を完成し、性能を向上させます.
debounce
高エネルギー消費イベントに対して、debounce関数は良い解決策である.scroll、resize、key*イベントにdebounceを使わないと 関数としては、あなたがミスをしたのとほぼ同じです.下のdebounce関数はあなたのコードを高効率に保つことができます.
poll
上でdebounce関数について述べましたが、イベントが存在しない場合は、イベントを挿入して必要な状態を判断することができません.
オンス
時々、与えられた機能を一回だけ発生させたいです.オンラインイベントと似ています.下記のコードはあなたの言った機能を提供します.
get Absolute Url
文字列変数から絶対URLを得るのは、あなたが思っているほど簡単ではありません.あるURLコンストラクタに対して、必要なパラメータを提供しないと問題が発生します.下記には優雅なテクニックがあります.文字列を送るだけで絶対的なURLが得られます.
isNative
指定された関数が元のものかどうかを知りたいなら、または声明で上書きできますか?次のこの使いやすいコードは答えをくれます.
insertRule
私達はすべて選択器(Dcument.querySelectorAll)によって一つのNodeListを取得することができ、各要素にスタイルを設定することができますが、どのようなより効率的な方法がありますか?
debounce
高エネルギー消費イベントに対して、debounce関数は良い解決策である.scroll、resize、key*イベントにdebounceを使わないと 関数としては、あなたがミスをしたのとほぼ同じです.下のdebounce関数はあなたのコードを高効率に保つことができます.
// , , 。 N , 。 ‘immediate' , , 。
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
//
var myEfficientFn = debounce(function() {
//
}, 250);
window.addEventListener('resize', myEfficientFn);
debounce関数は、指定された時間内に複数回のコールバック関数を実行することができません.頻繁にトリガされるイベントに対しては、コールバック関数を割り当てることが重要です.poll
上でdebounce関数について述べましたが、イベントが存在しない場合は、イベントを挿入して必要な状態を判断することができません.
function poll(fn, callback, errback, timeout, interval) {
var endTime = Number(new Date()) + (timeout || 2000);
interval = interval || 100;
(function p() {
// , !
if(fn()) {
callback();
}
// , ,
else if (Number(new Date()) < endTime) {
setTimeout(p, interval);
}
// , !
else {
errback(new Error('timed out for ' + fn + ': ' + arguments));
}
})();
}
// :
poll(
function() {
return document.getElementById('lightbox').offsetWidth > 0;
},
function() {
// ,
},
function() {
// ,
}
);
Pollingはウェブで長く使われています.将来も使われます.オンス
時々、与えられた機能を一回だけ発生させたいです.オンラインイベントと似ています.下記のコードはあなたの言った機能を提供します.
function once(fn, context) {
var result;
return function() {
if(fn) {
result = fn.apply(context || this, arguments);
fn = null;
}
return result;
};
}
//
var canOnlyFireOnce = once(function() {
console.log('Fired!');
});
canOnlyFireOnce();
// "Fired!"
canOnlyFireOnce();
// nada
//
与えられた関数が一回だけ呼び出されることを確保し、繰り返し初期化を防止します.get Absolute Url
文字列変数から絶対URLを得るのは、あなたが思っているほど簡単ではありません.あるURLコンストラクタに対して、必要なパラメータを提供しないと問題が発生します.下記には優雅なテクニックがあります.文字列を送るだけで絶対的なURLが得られます.
var getAbsoluteUrl = (function() {
var a;
return function(url) {
if(!a) a = document.createElement('a');
a.href = url;
return a.href;
};
})();
//
getAbsoluteUrl('/something');
// http://davidwalsh.name/something
a要素のhref処理とurl処理は無意味に見えるが、return文は信頼できる絶対URLを返している.isNative
指定された関数が元のものかどうかを知りたいなら、または声明で上書きできますか?次のこの使いやすいコードは答えをくれます.
;(function() {
// value `[[Class]]`
var toString = Object.prototype.toString;
//
var fnToString = Function.prototype.toString;
// (Safari > 4 ; )
var reHostCtor = /^[object .+?Constructor]$/;
// , 。
// 'Object#toString' 。
var reNative = RegExp('^' +
// 'Object#toString'
String(toString)
//
.replace(/[.*+?^${}()|[]/]/g, '$&')
// '.*?' 'toString' , 。
// 'for ...' , Rhino , , 。
.replace(/toString|(function).*?(?=()| for .+?(?=])/g, '$1.*?') + '$'
);
function isNative(value) {
var type = typeof value;
return type == 'function'
// 'Function#toString' (fnToString) (value) 'toString' , 。
? reNative.test(fnToString.call(value))
// , ( ) (typed arrays) DOM , 。
: (value && type == 'object' && reHostCtor.test(toString.call(value))) || false;
}
//
module.exports = isNative;
}());
//
isNative(alert);
// true
isNative(myCustomFunction);
// false
この関数は完璧ではないが、任務を達成することができます.insertRule
私達はすべて選択器(Dcument.querySelectorAll)によって一つのNodeListを取得することができ、各要素にスタイルを設定することができますが、どのようなより効率的な方法がありますか?
var sheet = (function() {
//