如何调用所有者对象的函数

时间:2019-08-21 06:46:37

标签: javascript

我有几个业务对象(具有不同的类型),它们为一个通用对象实现功能,该对象被分配给每个业务对象的属性。 是否可以从公共对象调用在业务对象上声明的功能?

以下是一些类似的代码:

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);
...

2 个答案:

答案 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

此解决方案有许多可能的陷阱。只是一个想法而已。