我有几个业务对象(具有不同的类型),它们为一个通用对象实现功能,该对象被分配给每个业务对象的属性。 是否可以从公共对象调用在业务对象上声明的功能?
以下是一些类似的代码:
var Percent= function(){
this.input= null;
...
this.getValuesRange= function(){
return [min,max];
}
...
}
var Speed= function(){
this.input= null;
...
this.getValuesRange= function(){
return [min,max];
}
...
}
var Input= function(){
this.inputRange= function(){
//here I need to call owner's getValuesRange function
}
}
var input= new Input();
var mySpeed= new Speed();
var rocketSpeed= new Speed();
...
mySpeed.input= input;
rocketSpeed.input= input;
...
facade.enter(mySpeed);
facade.enter(rocketSpeed);
...
答案 0 :(得分:2)
要让inputRange
上的Input
访问getValuesRange
,它必须有权访问Speed
的实例。您的代码必须为其提供实例,JavaScript中没有内置的“对象通过属性引用此对象的对象”操作。 (如果有的话,必须考虑到多个对象可以引用同一个对象的事实,如您的示例一样-两个Speed
实例都引用同一个Input
实例)。
答案 1 :(得分:0)
使用某些解决方法是可能的。下面是一个示例:
var c = 0;
var Speed= function(){
var mc = c++;
var _input = null;
var _inputRange = null;
this.getInput= function() {
var self = this;
_input.inputRange = function() {
_inputRange.call(self);
}
return _input;
}
this.setInput= function(input) {
_input = input;
_inputRange = input.inputRange;
}
this.getValuesRange= function(){
console.log("Speed", mc);
}
}
var Input= function(){
this.inputRange= function(){
this.getValuesRange()
}
}
var input= new Input();
var mySpeed= new Speed();
var rocketSpeed= new Speed();
mySpeed.setInput(input);
rocketSpeed.setInput(input);
mySpeed.getInput().inputRange(); // Speed 0
rocketSpeed.getInput().inputRange(); // Speed 1
此解决方案有许多可能的陷阱。只是一个想法而已。