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>