javascriptの柔軟性

2497 ワード


プログラムが好きなら、こうしてもいいです.
 
 
	/*Start and stop animations using functions.*/
	function startAnination() {
		....
	}
	function stopAnination(){
		....
	}
 
 
この方法は簡単ですが、保存可能な状態を作成できず、内部の状態だけを操作する方法があるアニメーションオブジェクトを作成できません.
次のコードはクラスを定義しています.このようなオブジェクトを作成するにはそれを使ってもいいです.
 
 
	 /*Anim class.*/
	 var Anim = function(){
	 	....
	 };
	 Anim.prototype.start = function(){
	 	....
	 };
	 Anim.prototype.stop = function(){
	 	....
	 };

	 /*Usage.*/
	 var myAnim = new Anim();
	 myAnim.start();
	 ....
	 myAnim.stop();
 
 
上記のコードはAnimというクラスを定義し、2つの方法をこのクラスのプロトタイプの属性に割り当てます.
クラスの定義を一つの声明に入れるのがもっと好きなら、次のコードに変えられます.
 
	/*Anim class, with a slightly different syntax for declaring methods*/
	var Anim = function(){
 		....
	 };
	 Anim.prototype = {
	 	start : function(){
		 	....
		};
		stop : function(){
	 		....
		};
	};
 
 
これは従来のオブジェクト指向プログラマーから見れば、ケンはちょっと見覚えがあります.彼らはこのような方法を見て、グループに埋め込まれた声明を見るのに慣れています.
声明の中.以前にこのようなプログラミングスタイルを使ったことがあるなら、下のようなものを試してみたいかもしれません.
 
 
	/*Add method to the Function object that can be used to declare methods*/
	Function.prototype.methed = function(name, fn){
		this.prototype[name] = fn;
	};

	/*Anim class, with ,methods created using a conbenience ,method.*/
	var Anim = function(){
		....
	};
	Anim.method('start', function(){
		.....
	});
	Anim.method('stop', function(){
		....
	});
 
 
Function.protype.methodはクラスのために新しい方法を追加するために使用されます.彼は二つのパラメータを持っています.一つ目は文字列で、新しい方法を表します.
の名前二つ目は新しい方法としての関数です.
 
Funtion.prototype.methodをさらに修正して、チェーンで呼び出すことができます.これは彼からthisに戻るだけです.
値だけでいいです
 
 
	/*This version alllows the calls to be chained.*/
	Function.prototype.method = function(name, fn){
		this.prototype[name] = fn;
		return this;
	};

	/*Anim class, with methods created using a convenience and chaining.*/
	var Anim = function(){
		....
	};
	Anim.
		method('start', function(){
			....
		}).
		method('stop', function(){
			....
		});