我有一个带有一组原型方法的对象。如何调用给定的方法是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
内呼叫的正确语法。
答案 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
或[]
获取哪些元素