apply, callを使った委譲のメモ。
applyはFunction.prototypeのメソッドなので全ての関数オブジェクトが利用できる。
Function.prototype.apply (thisArg, argArray)
ECMA-262 5th Edition / December 2009 p128
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.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。