JavaScript_09設計模式(建立介面的方式【二】)屬性檢測法
阿新 • • 發佈:2018-12-22
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>New Web Project</title> <script type="text/javascript" charset="UTF-8"> /** * 第二種,實現介面的方式: * 屬性檢測方式 * */ /** * interface Composite{ * function add(obj); * function delete(obj); * function update(obj); * } * * interface FormItem{ * function select(obj); * * } * */ //CompositeImpl implements Composite,FormItem var CompositeImpl=function(){ //顯示的在類的內部,接受所實現的介面 //一般來講,專案經理在類的內部,告訴程式設計師在類的內部定義一個類的變數(陣列),名字要固定,是一個規範。 this.inplementsInterfaces=['Composite','FormItem']; } /* var CompositeImpl2=function(){ }*/ CompositeImpl.prototype.add=function(obj){ //do something alert('add...'); } CompositeImpl.prototype.remove=function(obj){ //do something } CompositeImpl.prototype.update=function(obj){ //do something } CompositeImpl.prototype.select=function(obj){ //do something } //檢測類的物件的 function CheckCompositeImpl(instance){ //判斷當前物件是否實現了所有的介面。 if(!IsImplements(instance,'Composite','FormItem')){ throw new Error('這個實列物件沒有實現繼承'); } } //公用的具體檢測方法,檢測類的核心方法 返回值boolean //這個方法的主要目的,就是判斷實列物件有沒有實現相關的介面。 function IsImplements(object){ //arguments物件,獲得函式的實際引數 for(var i=1;i<arguments.length;i++){ //接收所實現的每一個介面的名字 var interfaceName=arguments[i]; //判斷此方法到底是成功的,還是失敗的。 var interfaceFound=false; for(var j=0;j<object.inplementsInterfaces.length;j++){ if(object.inplementsInterfaces[j]==interfaceName){ interfaceFound=true; break; } } if(!interfaceFound){ return false; } } return true; } var c1=new CompositeImpl(); CheckCompositeImpl(c1); c1.add(); </script> </head> <body> <h1>New Web Project Page</h1> </body>