【发布时间】:2019-02-11 18:21:01
【问题描述】:
我是 JavaScript 新手,很难直观地理解以下代码 sn-p。它是用于在某些物理引擎(matter.js)中制作盒子的代码
function Box(x, y, w, h){
this.body = Bodies.rectangle(x,y,80,80);
this.w = w;
this.h = h;
World.add(world, this.body)
this.show = function(){
var pos = this.body.position;
var angle = this.body.angle;
push();
translate(pos.x, pos.y);
rect(0,0,this.w,this.h);
pop();
}
}
box1 = new Box(200,100,50,50)
function draw() {
background(51);
box1.show();
}
我的问题是这样的:
- 为什么不只使用 w 或 h,为什么将“this.w”分配给 w,将“this.h”分配给 h
- 我对 push() 感到困惑。为什么括号里什么都没有?默认添加了什么?
- 与 pop() 相同。它在去除什么?
【问题讨论】:
-
分享
push()和pop()的实现。 -
push和pop经常被图形库用来控制正在绘制的内容的变化。push推送要应用的新转换,translate转换发生,rect使用当前转换绘制,然后pop弹出(删除)当前转换,因此它不会影响其他任何东西绘制。 -
由于
show()不在prototype上,因此在实例上初始化w和h在这里没有任何好处(除了使它们在构造函数之外可变)。通常成员方法应该在构造函数之外定义为Box.prototype.show = function () { ... };,在这种情况下,需要在实例上初始化w和h。 -
这个关键字指的是它所属的对象。在这里我们不能使用 w 或 h,因为它们只是函数 Box 的局部变量,或者我们可以说它们具有块级作用域,因此它们不能在该块之外使用。
标签: javascript this matter.js