【问题标题】:javascript plain object: what happen to this property? [closed]javascript 普通对象:这个属性发生了什么? [关闭]
【发布时间】:2016-10-18 03:11:56
【问题描述】:

查看 myGameArea 对象;我知道画布是一个属性。但是当我调用 start() 方法时发生了什么?该属性现在似乎具有属性,宽度和高度。所以画布属性丢失了?是一个对象?有人可以解释一下吗?谢谢

var myGameArea = {
    canvas : document.createElement("canvas"),
    start : function() {
        this.canvas.width = 480;
        this.canvas.height = 270;
        this.context = this.canvas.getContext("2d");
        document.body.insertBefore(this.canvas, document.body.childNodes[0]);
    }
}

【问题讨论】:

  • (OT)“发生了什么?” - “你所有的基地都属于我们!”
  • canvas 是一个对象(类型为“DOM 元素”)。一个对象可以有它自己的属性。这是基本的 OOP 理论。

标签: javascript html object


【解决方案1】:

对象是myGameAreacanvas 是它的一个属性。

canvas 属性没有丢失。它就在那里,可以通过在start() 中使用this.canvas 访问,就像您正确地做的那样。 canvas 属性现在也有自己的属性,widthheight

您可以查看此示例中的console.log 输出来验证:

https://jsfiddle.net/dfq4Lnho/

为了不使用start

https://jsfiddle.net/dfq4Lnho/1/

var myGameArea = function() {
    this.canvas = document.createElement("canvas");
    this.canvas.width = 480;
    this.canvas.height = 270;
    this.context = this.canvas.getContext("2d");
    document.body.insertBefore(this.canvas, document.body.childNodes[0]);
}

myGameArea.prototype.somethingElse = function() {
    console.log('this is a method of myGameArea');
    console.log(this.canvas); // access this.canvas here too!
}

var tmp = new myGameArea();
console.log(tmp.canvas);
tmp.somethingElse();

【讨论】:

  • 我会删除 now 因为 HTMLCanvasElement 默认有 widthheight 属性。
  • 有趣。但这里有一件事......如果没有方法 start() 你怎么做同样的事情?......我的意思是向普通对象的属性添加属性?
  • 查看更新的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 2014-11-12
相关资源
最近更新 更多