的JavaScript。如果方法命名为字符串加args,我如何调用原型方法?

时间:2015-12-07 15:43:05

标签: javascript prototype

我有一个带有一组原型方法的对象。如何调用给定的方法是name和arg list?

所以我有对象:

scarpa.MyThing = function() {
}

MyThing有一个原型方法:

scarpa.MyThing.prototype.beAwesome = function(a, b, c) {
    // do awesome stuff here with a, b, and c
}

现在,我想从另一个原型方法中调用beAwesome

scarpa.MyThing.prototype.genericCaller = function(methodName, d, e, f) {

    // this does not work for me
    this.call(methodName, d, e, f)

}

以下是对genericCaller的调用:

this.genericCaller('beAwesome', alpha, zeta, bravo);

我坚持genericCaller内呼叫的正确语法。

有人可以赐教吗?感谢。

3 个答案:

答案 0 :(得分:5)

您想使用括号表示并应用

scarpa.MyThing.prototype.genericCaller = function(methodName) {
    var args = [].slice.call(arguments);  //converts arguments to an array
    args.shift(); //remove the method name
    this[methodName].apply(this, args);  //call your method with the current scope and pass the arguments
};

使用参数的好处是你不必一直担心d,e,f。你可以传递20件事,它仍然有效。

答案 1 :(得分:0)

该代码中存在相当多的错误。试试这个。

'call'是函数可用的函数。你试图在一个对象上调用它(这个)。那不行。

您所要做的就是做this[methodName].call()。调用将context作为第一个参数,因此传递this。然后剩下的论点。

var scarpa = {};
scarpa.MyThing = function() {
}

scarpa.MyThing.prototype.beAwesome = function(a, b, c) {
    // do awesome stuff here with a, b, and c
    console.log(arguments);
}

scarpa.MyThing.prototype.genericCaller = function(methodName, d, e, f) {


    //this[methodName].call(this,d,e,f)
    this[methodName](d, e, f)

}

var m = new scarpa.MyThing();
m.genericCaller('beAwesome', "", "", "");

答案 2 :(得分:0)

你试过这样做吗?

scarpa.MyThing.prototype.genericCaller = function(methodName, d, e, f) {
    this[methodName](d, e, f);
}

这是有效的,因为scarpa.MyThing也是一个对象,您可以通过dot[]获取哪些元素