apply関数
- Functionオブジェクトのapply関数を呼び出すことで、thisを差し替えての関数呼び出しができる!
- 第2パラメーターには関数パラメーターを配列で指定する。
サンプルその1
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <script type="text/javascript"> var Foo = function(msg){ this.msg = msg; }; Foo.prototype.getMessage = function(){ return this.msg; }; function pageLoad(){ var foo = new Foo("Fooインスタンス"); var obj = {msg : "差し替えインスタンス"}; window.alert(foo.getMessage.apply(obj)); } </script> <body onload="pageLoad();"> </body> </html>
サンプルその2
コンストラクタ関数のapply関数を呼び出すと、オブジェクトの特性を合成することができる!!
また、継承やオーバーロードのようなこともapply()で可能。
参照元:JavaScriptの再利用とapply | 勉強するのが、そんなに偉い訳!?
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <script type="text/javascript"> var Hoge = function(){ this.getHoge = function(){ return "ほげ"; }; }; var Foo = function(){ this.getFoo = function(){ return "ふー"; }; }; var Hello = function(name){ this.Name = name; this.getAisatu = function(){ return "はろー" + this.Name; }; } function pageLoad(){ var mixedObj = {}; Hoge.apply(mixedObj ); Foo.apply(mixedObj ); Hello.apply(mixedObj , ["太郎"]); window.alert(mixedObj .getHoge() + "、" + mixedObj .getFoo() + "、" + mixedObj .getAisatu()); } </script> <body onload="pageLoad();"> </body> </html>