0

我正在尝试在 javascript 中管理我的代码。我所做的是创建了两个类。

(function(){
 Main1 = function(){
    return this;
  }

Main1.prototype = {
Main1_method1 : function(){

},
Main1_method2 : function(){

}
}


})();

(function(){
 Main2 =function(){
        return this;
      }

    Main2.prototype = {
    Main2_method1 : function(){

    },
    Main2_method2 : function(){

    }
    }
})();

var MyInstance1 = new Main1();
var MyInstance2 = new Main2();

问题:我想在另一个中调用一个方法。我想调用Main2_method1 in Main1_method1,但我不知道该怎么做。

我可以使用经典模型(function.prototype.method = function(){})或原型模型object.create)。但我想使用上述方法来做到这一点。

4

3 回答 3

0

我不确定是否了解您的需求,也不确定您自己是否了解))

但如果我理解正确的话......))

(function(){

    Main1 = function(){return this};

    Main1.prototype = {
        method1 : function(){this.method1()}
    };

}());

(function(){

    Main2 = function(){return this};

    Main2.prototype = {
        method1 : function(){console.log('Eh?')}
    };

}());

var MyInstance1 = new Main1();
var MyInstance2 = new Main2();

MyInstance1.method1.call(MyInstance2);
于 2013-12-18T20:44:43.810 回答
0

好吧,您需要在实例上调用该方法:

(function(){
    Main2 =function( instance1 ) {
        this.main1 = instance1;
        return this;
     }

    Main2.prototype = {
        Main2_method1 : function() {
            this.main1.Main1_method1();
        }
    }
})();

var MyInstance1 = new Main1();
var MyInstance2 = new Main2( MyInstance1 );

您需要弄清楚的唯一部分是如何Main2访问Main1实例。您可以简单地将其放在全局范围内,这将起作用。

但是为了干净,您可能希望在实例化时将Main1实例注入Main2其中。或者,您可以使用事件中心将它们分离。

于 2013-12-18T19:51:50.580 回答
-1

受Stoyan Stefanov的“Javascript 模式”一书的启发,您可以使用“公共静态成员”模式,它允许您为可从任何地方访问的对象定义一些特殊方法。看那个例子:

    // Define a first object
    var Main1 = function(){
      var method1 = function() {
        return 'Main1.Method1';
      }

      var method2 = function(){
        return "I'm Main1 method2, executing: " + Main2.Method1();
      }

      return {
        Method1 : method1,
        Method2 : method2
      }
    }

    // Define a second object
    var Main2 = function(){
      var method2 = function() {
        return 'Main2.Method1';
      }
      return {
        Method2 : method2
      }
    }
    // Add a static method to Main2
    Main2.Method1 = function(){
      return 'Main2.Method1';
    }

    // Then you can execute the static method without 
    // instantiate its object...
    console.log(Main2.Method1()); // output: Main2.Method1

    // So, this will work
    var foo = new Main1();
    console.log(foo.Method2()); //output: I'm Main2 Method2, executing: Main2.Method1

没有唯一的解决方案,但在我看来,它是最好的解决方案之一。

回到您的代码中,问题可能在于您已经在不同的闭包中定义了这两个对象。所以 Main1 不能使用 Main2 方法,因为 Main2 已在不同的范围内定义。

于 2013-12-18T19:54:27.933 回答