我正在尝试在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
)。但我想使用上述方法做到这一点。
答案 0 :(得分: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
实例。或者,使用事件中心将它们分离。
答案 1 :(得分: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);
答案 2 :(得分:-1)
在“Javascript Patterns" by Stoyan Stefanov”一书的启发下,您可以使用“公共静态成员”模式,该模式允许您为可从任何地方访问的对象定义一些特殊方法。请参阅该示例:
// 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已在不同的范围内定义。