ホームページ > ウェブフロントエンド > jsチュートリアル > Javascript オブジェクト指向 (3) インターフェース code_js オブジェクト指向

Javascript オブジェクト指向 (3) インターフェース code_js オブジェクト指向

WBOY
リリース: 2016-05-16 17:53:21
オリジナル
1067 人が閲覧しました

プログラム内のインターフェイス: メソッドの数とメソッド名を指定します。 (プログラム内で実行すべきタスクはすべて関数やメソッドで実装されるため)

JavaScriptにおけるインターフェース: インスタンスから出てくるある「型オブジェクト」と、インスタンスから出てくる「インターフェースオブジェクト」比較を行い、ルールに従うことで、次のように言えます。このオブジェクトは、指定されたインターフェイス

を実装します (インターフェイス クラス: このクラスを通じて、異なるインターフェイスがインスタンス化されます。つまり、異なるインターフェイスです)。
(比較: 本質は、サブタイプ インスタンスのオブジェクトがインターフェイス オブジェクトに保存されているメソッド名とその数を持っているかどうかを判断することです。)
Small例:
電話カテゴリ。その下に「電話」、「携帯電話」、「タブレット電話」などのサブカテゴリがあります。そして、これらのサブクラスはすべて、共通のタスク、機能、または目的を持っています --- [電話をかける]
この機能を実現するために、電話がプルスルーできるように、異なるサブクラスは異なる内部実装メソッドを持つことができます。しかし、ユーザーのために、次のような規定を設ける必要があります:
どのようなサブタイプであっても、インスタンス化するオブジェクト、つまり電話機能を持つオブジェクトには、[電話をかける] を実装する 2 つのメソッドが必要です。 、
つまり: 1. 電話番号 (数字キー) を押します。 2. ダイヤル キーを押します。
次は固定デザイン パターンです:

コードをコピーします コードは次のとおりです:

var Interface = function(name,methods){
if(arguments.length != 2){
throw new Error( ""arguments.length" 引数で呼び出されたインターフェイス コンストラクターですが、正確に 2 つ必要です。");
this.name = name
this.methods = []; 🎜>for(var i = 0,len =methods.length; i
if(typeofmethods[i] !== 'string'){
throw new Error("インターフェイス メソッドの名前は String である必要があります");
}
this.methods.push(methods[i]);
}
};
//静的クラス Method
Interface.ensureImplements = function( myobject1,Iobject1){
if(arguments.length!=2){
throw new Error("メソッド Interface.ensureImplemnents は " argument.length " パラメーターを指定しましたが、2 が必要です。" );
}
for(var i=1,len = argument.length; ivar _interface = argument[i];//インターフェイスを介したインターフェイスclass インスタンスが出てきます
if(_interface.constructor !== Interface){
throw new Error("インターフェイスが Interface クラスを通じて作成されていないため、インスタンスが出てきます");
>//インターフェイス オブジェクトを内部に配置します。メソッド名を取り出し、この例では携帯電話オブジェクトと組み合わせて、携帯電話オブジェクトにこれら 2 つのメソッドがあるかどうか、およびメソッド名が同じかどうかを確認します。
for(var; j=0、methodsLen = _interface.methods.length; jvar method = _interface.methods[j];
if(!myobject1[メソッド]||typeof myobject1[メソッド] ! == 'function'){
throw new Error("パス検証関数: Interface.ensureImplements: " myobject1.name "オブジェクト メソッド "メソッド" が見つからないか、関数ではありません"); >}
}
} ;


以下は例です



コードをコピーします

this.name = call;
}
//携帯電話クラスのパブリック メソッド
mobilepone.prototype = {
"constructor":mobilepone,
//前のインターフェイス オブジェクトで指定されたメソッド名と同じ;
" callfun" : function(){
document.write("key");
// 同じである必要があります。前のインターフェイス オブジェクトで指定されたメソッド名として
"callnum" : function(){
document.write("Dial")
}
}
//Samsung モバイルをインスタンス化します。携帯電話クラスを介した電話オブジェクト
var anycall = new mobilepone("anycall") ;
//この Samsung 携帯電話オブジェクトが [Dial a call] インターフェイスを実装しているかどうかを確認します。つまり、Samsung 携帯電話を渡します。オブジェクトとインターフェイス オブジェクトをパラメータとして検証関数に追加します。
Interface.ensureImplements( anycall,testInterface)

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート