获取/设置Javascript成员的正确方法?(本期使用Kineticjs)
我正在创建一个js类并实现一些Kinetic.js类和方法。我不确定设置一个类变量的正确方法是什么。我有:获取/设置Javascript成员的正确方法?(本期使用Kineticjs),javascript,html,function,kineticjs,Javascript,Html,Function,Kineticjs,我正在创建一个js类并实现一些Kinetic.js类和方法。我不确定设置一个类变量的正确方法是什么。我有: function Canvas(){ this.stage; this.backgroundLayer; } Canvas.prototype.init = function(w, h){ this.stage = new Kinetic.Stage({ container: 'container', width: w, height: h });
function Canvas(){
this.stage;
this.backgroundLayer;
}
Canvas.prototype.init = function(w, h){
this.stage = new Kinetic.Stage({
container: 'container',
width: w,
height: h
});
this.backgroundLayer = new Kinetic.Layer();
this.stage.add(this.backgroundLayer);
}
Canvas.prototype.addImg = function(){
var imageObj = new Image();
imageObj.onload = function() {
var yoda = new Kinetic.Image({
x: 200,
y: 50,
image: imageObj,
width: 106,
height: 118,
draggable: true
});
this.backgroundLayer.add(yoda);
};
imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/yoda.jpg';
}
但是,在这一行:
this.backgroundLayer.add(yoda);
我得到这个控制台错误:
Uncaught TypeError: Cannot call method 'add' of undefined
作为JS新手,我假设this.backgroundLayer
不在范围内,因此未定义。这是否正确?如果正确,我将如何纠正该问题?我尝试设置var v=this.backgroundLayer
并将其作为参数传递到函数中,然后像这样添加层:v.add(yoda)
,但返回了未捕获的TypeError:Object#没有方法“add”
。在我看来,这是一个可能的解决方案,但正如我所说,我对javascript有点陌生
Canvas.prototype.addImg = function(){
var self = this
var imageObj = new Image();
imageObj.onload = function() {
var yoda = new Kinetic.Image({
x: 200,
y: 50,
image: imageObj,
width: 106,
height: 118,
draggable: true
});
self.backgroundLayer.add(yoda);
};
imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/yoda.jpg';
}
保留上一上下文中对该的引用。JavaScript的一个令人困惑的特性是,
这个
根据上下文而变化。这很让人困惑。我会读更多。谢谢你的提示!对于希望进一步阅读本主题的任何人: