この一連の呼び出しがあるとしましょう:
var btn = $('#mybtn');
btn.addClass('is-active').text(btn.attr('data-alt-active'));
addClass
前に呼び出されることは明らかですtext
が、いつbtn.attr
呼び出されるのでしょうか。呼び出される直前text
ですか、それともチェーン全体の前ですか?
この一連の呼び出しがあるとしましょう:
var btn = $('#mybtn');
btn.addClass('is-active').text(btn.attr('data-alt-active'));
addClass
前に呼び出されることは明らかですtext
が、いつbtn.attr
呼び出されるのでしょうか。呼び出される直前text
ですか、それともチェーン全体の前ですか?
これを実行する:
<span id="mybtn" data-alt-active="Alternative text">Hello</span>
function aliasWrap(func, msg) {
function _wrapped() {
console.log(msg);
return func.apply(this, arguments);
}
return _wrapped
}
$.fn._addClass = aliasWrap($.fn.addClass, 'addClass called');
$.fn._text = aliasWrap($.fn.text, 'text called');
$.fn._attr = aliasWrap($.fn.attr, 'attr called');
var o = $('#mybtn');
o._addClass('is-active')._text(o._attr('data-alt-active'));
コンソールに次を出力します。
addClass called
attr called
text called
tl;dr; 連鎖メソッド呼び出し内で呼び出される関数は、連鎖メソッドが呼び出される直前に呼び出されます。