Function.apply, Function.call : JavaScript

Pocket

apply, callを使った委譲のメモ。

apply

applyはFunction.prototypeのメソッドなので全ての関数オブジェクトが利用できる。

Function.prototype.apply (thisArg, argArray)

ECMA-262 5th Edition / December 2009 p128

call

Function.prototype.call (thisArg [ , arg1 [ , arg2, … ] ] )

ECMA-262 5th Edition / December 2009 p118

apply, callの働きは同じ。違いはapplyは第2引数として配列をとりcallの第2引数以降はスカラーをとる。

apply/callは自身を実行するとき第1引数に渡されたオブジェクトでthisを置き換える。applyの第2引数は配列をとり自身を実行するときの引数として使う(省略可能)。

function Custom (name, gender) {
    this.name = name;
    this.gender = gender;
}
var o = {};
o.getValue = function () {
    alert(this.name + ':' + this.gender);  // 山田 太郎:男性
}
Custom.apply(o,['山田 太郎', '男性']);
o.getValue();
function Custom (name, gender) {
    this.name = name;
    this.gender = gender;
}
var o = {};
o.getValue = function () {
    alert(this.name + ':' + this.gender);  // 山田 太郎:男性
}
Custom.call(o, '山田 太郎' , '男性');
o.getValue();

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。