获取/设置Javascript成员的正确方法?(本期使用Kineticjs)

获取/设置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 });

我正在创建一个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
  });

  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的一个令人困惑的特性是,
这个
根据上下文而变化。

这很让人困惑。我会读更多。谢谢你的提示!对于希望进一步阅读本主题的任何人: