JAvascript設計モード漫談【0】インタフェースクラスの製造
5065 ワード
最近を見ていると、純english版はちょっと苦労しているように見えますが、無理に少し知識を吸収しました.あまり心が狭いわけにはいかないと精神的に教えてくれたので、少しずつ分かち合いましょう.一方、私は最近ずっとブログを書いていないことを補っています.
私の計画は、このjavascript設計モードを一歩一歩汲み取って共有することです.では、私たちの最初の駅はjavascriptのインタフェースから話します.
私たちのサービス側コードはJava言語で例を挙げています.ちょうど、この言語はjavascript言語と歴史的なつながりがあります.通常java言語のインタフェース定義は次のようになります.
では、私たちのjavascriptの間にはどのようにインタフェースを書きますか?実はjavascriptにはもともとインタフェースの概念がありません.しかし、私たちはこのような「死」の考えを持ってはいけません.私たちの頭は柔軟で、javascript言語も柔軟です.当初、私たちがc++を学んだときもインタフェースがあるとは聞いていませんでしたね.では、インタフェースは何ですか.
オブジェクト向け言語では、オブジェクトをカプセル化するには、プロパティとカプセル化方法が必要です.これらの方法は、多くの類似オブジェクト特有の方法を表すことが多い.だからインタフェースを派生します.実は簡単です:インタフェースは共通の方法の定義です.
実はメソッド本省は属性がなく、メソッドのみのオブジェクトに似ています.javascriptインタフェースを構築するには、この点から出発します.インタフェースオブジェクトを作成し、インタフェースメソッドを定義する必要があります.最後に、これらのインタフェースをインスタンスオブジェクトで実装します.
1.Interfaceオブジェクトの定義:var Interface=function(){....}
2.インタフェースメソッドの定義(メソッド名のみ、メソッドボディはどのように実装されていませんか?)では、これらのインタフェースメソッド名を保存するために、InterfaceでMethods配列を定義します.var Interface=function(name,methods){
this.name = name;
this.methods =[];
.......
}
3.インスタンスオブジェクトを探してインタフェースを実装します.javascriptでは実際の実装インタフェースは不可能です.そうするしかありません.インタフェースという標準的な方法シリーズを規定しています.あなたのすべての形態意識的に彼のインタフェースクラスを実現するには、彼のメソッド名を実現しなければなりません.つまり、メソッド名はインタフェースと一致しなければなりません.では、このような仕事を厳しくするには、私たちには最後のことがあります.
4.インタフェースメソッドの実装検証.すなわち,オブジェクトのメソッド名がインタフェース内のメソッド名をすべて実装しているかどうかを検証する.ここではInterfaceにensureImplementsメソッドを与え,検証を行う.
では、コードを写し始めます.
これで、インタフェースクラスが作成され、インタフェースを定義する方法は次のとおりです.
Next~~インタフェースを実装します~~
これらをホームページに入れてみてください
OK~~~そろそろ休みます~~
終了:
きっとまた戻ってくるよ~~
私の計画は、このjavascript設計モードを一歩一歩汲み取って共有することです.では、私たちの最初の駅はjavascriptのインタフェースから話します.
私たちのサービス側コードはJava言語で例を挙げています.ちょうど、この言語はjavascript言語と歴史的なつながりがあります.通常java言語のインタフェース定義は次のようになります.
public interface MyInterface{
String A();
void B();
int C();
}
//implements the interface MyInterface
public class MyClass implements MyInterface{
public String A(){...}
public void B(){....}
public int C(){....}
}
では、私たちのjavascriptの間にはどのようにインタフェースを書きますか?実はjavascriptにはもともとインタフェースの概念がありません.しかし、私たちはこのような「死」の考えを持ってはいけません.私たちの頭は柔軟で、javascript言語も柔軟です.当初、私たちがc++を学んだときもインタフェースがあるとは聞いていませんでしたね.では、インタフェースは何ですか.
オブジェクト向け言語では、オブジェクトをカプセル化するには、プロパティとカプセル化方法が必要です.これらの方法は、多くの類似オブジェクト特有の方法を表すことが多い.だからインタフェースを派生します.実は簡単です:インタフェースは共通の方法の定義です.
実はメソッド本省は属性がなく、メソッドのみのオブジェクトに似ています.javascriptインタフェースを構築するには、この点から出発します.インタフェースオブジェクトを作成し、インタフェースメソッドを定義する必要があります.最後に、これらのインタフェースをインスタンスオブジェクトで実装します.
1.Interfaceオブジェクトの定義:var Interface=function(){....}
2.インタフェースメソッドの定義(メソッド名のみ、メソッドボディはどのように実装されていませんか?)では、これらのインタフェースメソッド名を保存するために、InterfaceでMethods配列を定義します.var Interface=function(name,methods){
this.name = name;
this.methods =[];
.......
}
3.インスタンスオブジェクトを探してインタフェースを実装します.javascriptでは実際の実装インタフェースは不可能です.そうするしかありません.インタフェースという標準的な方法シリーズを規定しています.あなたのすべての形態意識的に彼のインタフェースクラスを実現するには、彼のメソッド名を実現しなければなりません.つまり、メソッド名はインタフェースと一致しなければなりません.では、このような仕事を厳しくするには、私たちには最後のことがあります.
4.インタフェースメソッドの実装検証.すなわち,オブジェクトのメソッド名がインタフェース内のメソッド名をすべて実装しているかどうかを検証する.ここではInterfaceにensureImplementsメソッドを与え,検証を行う.
では、コードを写し始めます.
//Constructor.
var Interface = function(name,methods){
if(arguments.length != 2){
throw new Error("Interface constructor called with" + arguments.length + "arguments, but expected exactly 2.");
}
this.name = name;
this.methods = [];
for(var i = 0,len = methods.length; i <len; i++){
if(typeof methods[i] !== 'string'){
throw new Error(" “);
}
this.methods.push(methods[i]);
}
};
//Static class Method
Interface.ensureImplements = function(object){
if(arguments.length<2){
throw new Error(" Interface.ensureImplemnents " + arguments.length+ " , 2 .");
}
for(var i=1,len = arguments.length; i<len; i++){
var _interface = arguments[i];
if(_interface.constructor !== Interface){
throw new Error(" Interface.ensureImplements ");
}
for(var j=0, methodsLen = _interface.methods.length; j<methodsLen;j++ ){
var method = _interface.methods[j];
if(!object[method]||typeof object[method] !== 'function'){
throw new Error("Function Interface.ensureImplements: object does not implements the "+_interface.name + "interface. Method "+ method + " was not found");
}
}
}
};
これで、インタフェースクラスが作成され、インタフェースを定義する方法は次のとおりです.
var myInterface = new Interface('myInterface',['methodA','methodB','methodC']);
// myInterface ,methodA~methodC
Next~~インタフェースを実装します~~
/**
* design interface
*/
var MyInterface = new Interface('MyInterface',['A','B','C']);
/**
* implements the methods of the interface
*/
var MyObject = function(name){
this.name = name;
}
MyObject.prototype.A = function(){
alert('A');
}
MyObject.prototype.B = function(){
alert('B');
}
MyObject.prototype.C = function(){
alert('C');
}
MyObject.prototype.D = function(){
alert('another method D');
}
window.onload = function(){
var myObj = new MyObject('jgx');
Interface.ensureImplements(myObj,MyInterface);
myObj.D();
}
これらをホームページに入れてみてください
<html>
<head>
<title>test</title>
<script type="text/javascript" src="Interface.js"></script>
<script type="text/javascript" src="implements.js"></script>
</head>
<body></body>
</html>
OK~~~そろそろ休みます~~
終了:
きっとまた戻ってくるよ~~