如何在ctx
函数中访问loadImage
?我已经看到了与此类似的片段,但是当我尝试时它只是不起作用。它总是说这个'或者' this.ctx'或者' ctx'未定义。
var MyClass= function(canvasId){
var canvas = document.getElementById(canvasId);
var ctx = canvas.getContext("2d");
};
MyClass.prototype.loadImage = function(imageSrc){
var image = new Image();
image.src = imageSrc;
//cannot access this or ctx
image.onload = function(){
this.ctx.drawImage(image,0,0);
};
//can't even access it here:
ctx.drawImage(image,0,0);
};
//window.onload = function(){
var myObject= new MyClass("myCanvas");
myObject.loadImage('myImage.jpg');
答案 0 :(得分:2)
如何在函数loadImage中访问ctx?
你做不到。除非您在构造函数的范围内创建loadImage
函数。有关详细信息,请参阅Javascript: Do I need to put this.var for every variable in an object?。
我看到的片段与此完全相同
然后这些片段也不起作用。
答案 1 :(得分:1)
从proptotype方法访问ctx
的唯一方法是使用this
关键字将其设置为实例属性。
var MyClass = function (canvasId) {
this.canvas = document.getElementById(canvasId);
this.ctx = this.canvas.getContext("2d");
};
MyClass.prototype.loadImage = function (imageSrc) {
var image = new Image();
image.src = imageSrc;
var self = this;
image.onload = function () {
self.ctx.drawImage(image, 0, 0);
};
this.ctx.drawImage(image, 0, 0);
};
请注意,在内部图像onload
处理程序中,您有不同的上下文:this
不再指向MyClass
实例,而是指向图像对象实例。您可以通过在this
等变量中保存对正确self
的引用来克服它。