0

以下は、javascript でインターフェイスの概念を実現するために使用したコードです。

function Interface1(ImplementingClass) {
  return {
       implementedFunction : ImplementingClass.implementedFunction
  }
}

function  Interface2(ImplementingClass) {

   return {
      implementedFunction : ImplementingClass.implementedFunction
   }
}

function ImplementingClass() {
 this.implementedFunction = function() {
     // How to get implemented interface name, for 
     // example here interface name should be Interface1???
 }
}


function Test() {
    this.test = function() {
         return new Interface1(new ImplementingClass());
    }
}


var test = new Test();  
test.test().implementedFunction();

質問: 実装された関数でインターフェイス名を取得する方法。たとえば、Java では演算子のインスタンスを使用します。

if(this instance of Interface) { 
    // Do something  
}
4

1 に答える 1

4

いいえ、機能しませんinstanceof- コンストラクター関数のprototypeオブジェクトからのプロトタイプの継承のみです。インターフェイスに関する情報が必要な場合は、インターフェイス オブジェクトに配置する必要があります。

function Interface(implementingInstance) {
    return {
        interfaceName: "MyInterface",
        implementedFunction : implementingInstance.implementingFunction
    }
}

function ImplementingClass() {
    this.implementingFunction = function() {
        console.log(this.interfaceName);
    }
}
/* maybe helpful:
ImplementingClass.prototype.interfaceName = "noInterface"; // real instance
*/

function Test() {
    this.test = function() {
        return Interface(new ImplementingClass());
    }
}

new Test().test().implementedFunction();
// calls `implementingFunction` on the object with the `interfaceName` property
于 2013-04-30T14:33:28.457 に答える