- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- JavaScript/文法/関数/call()とapply() へ行く。
- 1 (2009-11-15 (日) 19:41:28)
- 2 (2009-11-15 (日) 20:05:47)
call()とapply()
call()
function func(v) { alert(v + this.name); } func('hello, ');
↑ではthis.nameが参照出来ないが、
var obj = { name:'Taro' }; var func = function (v) { alert(v + this.name); }; func.call(obj, 'Hello, ');
↑のようにcall()を使うと任意のオブジェクト({name:'taro'})に対して関数(func())を実行できる。この際、オブジェクトには何の変更もない。 これを別の方法で実装すると、
var obj = { name:'Taro' }; obj.func = function (v) { alert(v + this.name); }; obj.func('Hello. '); delete obj.func;
となる。
apply()
apply()は第2引数を配列で取り(['Hello, ','Mr.'])、適用される関数には引数を並べて渡す(v1,v2)。
var obj = { name:'Taro' }; var func = function (v1,v2) { alert(v1 + v2 + this.name); }; func.apply(obj, ['Hello, ','Mr.']);
これはcall()でも以下のようにして実装出来る。
var obj = { name:'Taro' }; var func = function (v1,v2) { alert(v1 + v2 + this.name); }; func.call(obj, 'Hello, ','Mr.');