从公共方法访问私有对象变量
access private object variable from public method
如何访问函数loadImage
中的ctx
?我看到过这样的片段,但当我尝试时,它就是不起作用。它总是说"this"或"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');
如何在函数loadImage中访问ctx?
你不能。除非在构造函数的作用域内创建loadImage
函数。请参阅Javascript:是否需要为对象中的每个变量放置this.var?详细信息。
我看到过与这个完全一样的片段
然后这些片段也不起作用。
从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
实例,而是指向映像对象实例。例如,您可以通过在self
等变量中保存对适当this
的引用来克服它。
相关文章:
- 如何在HTML中显示服务器对象变量
- 在Javascript中重新分配对象变量时,原始对象会发生什么
- Javascript 方法看不到对象变量
- JavaScript对象范围-在对象方法中使用对象变量
- 将对象(变量)传递给angularjs指令
- 对象变量在 JavaScript 中是不可访问的
- 无法访问公共JavaScript对象变量
- 可以't获取具有“t”的对象变量;这个“;由setTimeout()函数调用的对象函数中的属性
- Javascript:如何在回调中设置父对象变量
- 从方法内部设置对象变量
- 访问对象中的对象变量
- JavaScript 中的对象变量
- 从 json 代码中删除 javascript 对象变量名称文本
- 将变量传递到对象变量中
- JavaScript 如何重新识别事件对象变量
- 从对象变量中获取子节点
- 使对象变量在所有“更深”的范围内都是可访问的
- 从方法 JavaScript 访问对象变量
- 如何在 javascript 中保存对象变量的状态
- 无法访问IE和Mozilla中javascript的类对象变量