我想知道这样的事情是否可行。我们使用'canvas'作为例子:
(function(){
function Canvas(canvas){
this.canvas = document.querySelector('#canvas');
this.ctx = this.canvas.getContext('2d');
this.testMethod('fillRect',[10,10,10,10]);
}
Canvas.prototype.testMethod = function(method,params){
this.method = method;
this.params = params;
this.ctx.method.apply(this.ctx, params);
}
var canvas = new Canvas();
})()
<canvas id='canvas' width=400 height=400></canvas>
当然它不起作用,但我想知道是否有可能以这种方式动态构造函数。我想要实现的是一种用户界面,我将在其中输入方法名称和参数,它们将在特定的上下文中执行(在此特定示例中为CanvasRenderingContext2D)
答案 0 :(得分:1)
尝试更改此行
this.ctx.method.apply(this.ctx, params);
到
this.ctx[method].apply(this.ctx, params);
因为canvas的属性(其值是函数)名称存储在变量中。
例如,如果您的对象是
var obj = {
a: function(){console.log(1)}
}
你可以调用
obj.a();
或者如果你有
var b = "a";
obj[b]();