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.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。