Javascript 如何调用所有者对象的函数
我有几个业务对象(具有不同的类型),它们实现了一个公共对象的功能,该对象被分配给每个业务对象的属性。 是否可以从公共对象调用在业务对象上声明的函数 以下是一些类似的代码:Javascript 如何调用所有者对象的函数,javascript,Javascript,我有几个业务对象(具有不同的类型),它们实现了一个公共对象的功能,该对象被分配给每个业务对象的属性。 是否可以从公共对象调用在业务对象上声明的函数 以下是一些类似的代码: var Percent=function(){ this.input=null; ... this.getValuesRange=函数(){ 返回值[最小值,最大值]; } ... } 变量速度=函数(){ this.input=null; ... this.getValuesRange=函数(){ 返回值[最小值,最大值];
var Percent=function(){
this.input=null;
...
this.getValuesRange=函数(){
返回值[最小值,最大值];
}
...
}
变量速度=函数(){
this.input=null;
...
this.getValuesRange=函数(){
返回值[最小值,最大值];
}
...
}
var输入=函数(){
this.inputRange=函数(){
//这里我需要调用所有者的getValuesRange函数
}
}
变量输入=新输入();
var mySpeed=新速度();
var rocketSpeed=新速度();
...
mySpeed.input=输入;
火箭速度输入=输入;
...
facade.enter(mySpeed);
正面。进入(火箭速度);
...
对于Input
上的inputRange
要访问getValuesRange
,它必须访问速度的实例。您的代码必须提供该实例,JavaScript中没有内置的“什么对象通过属性引用这个对象”操作。(如果存在,则必须考虑到多个对象可以引用同一个对象,如您的示例中所示-两个Speed
实例都引用相同的Input
实例。)这在一些解决方法中是可能的。这里有一个例子:
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
此解决方案可能存在许多陷阱。这里只是想给出一个想法。您可以将Speed实例传递给输入对象,然后使用它,这样我就明白您和太平洋公司所说的是,我应该将业务对象实例传递给输入对象。有些类似Input.currentOwner=mySeed;是吗?@TJCrowder我不能完全同意你的观点,因为从实例到构造函数.prototype的整个原型委托是建立在多个对象(实例)确实引用同一个对象(构造函数.prototype)的事实上的。在这种情况下,“什么对象通过属性引用这个对象”操作就是“this”关键字解析。因为constructor.prototype上的方法能够知道它们应该影响哪个实例,这要归功于“this”值。事实上,我的难看的解决方法基于相同的概念:每次调用“inputRange”方法都会正确设置其“this”。Gents,所有与输入相关的逻辑都在输入对象上,并且它的当前所有者实例上(关于业务对象)应该对该逻辑透明。这就是为什么mySpeed.getInput().inputRange()在这种情况下没有意义。从输入实例调用currentOwner.getValuesRange()时,我想知道这是否是最好的解决方案