[JavaScript]匿名メソッドを可能にするObject.prototype拡張

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[JavaScript]匿名メソッドを可能にするObject.prototype拡張

無名関数をメソッドとして使うには、Function.prototype.callFunction.prototype.applyを使って↓のように書かなくてはいけない。

var arr = ['A', 'B', 'C'];
var str = (function(s) { this.push(s); return this; }).call(arr, 'D').join(', ');

window.alert(str);    /* A, B, C, D */

これをどうしても↓みたいに1行で書きたかった。

var str = ['A', 'B', 'C'].a(function(s) { this.push(s); return this; }, 'D').join(', ');

と、いうことで書いたのが↓のメソッド。

/* anonymous methodのa */
Object.prototype.a = function() {
    var method = arguments[0], args = [];
    for (var i = 1, l = arguments.length; i < l; i++) args.push(arguments[i]);
    return method.apply(this, args);
}

第1引数で渡した関数オブジェクトを、メソッドとして実行します。第2引数以降はそのまま引数として関数オブジェクトに渡されます。

この関数があれば、下のようなことも簡単にできます。

/* エレメントのclassNameから、'classB'を除く */
var elm = document.createElement('div');
elm.className = 'classA classB classC';

elm.className = elm.className.split(/\s+/).a(function(c) {
    for (var i = 0; i < this.length; i++) if (this[i] == c) this.splice(i--, 1);
    return this;
}, 'classB').join(' ');

window.alert(elm.className);    /* classA classC */

便利だー

スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/45-329f58f5

トラックバック

コメント

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。