http://codepen.io/Lewitje/pen/GjqbbA
看着这个,想弄清楚到底发生了什么,这让我很沮丧。我最近一直在做一个javascript深潜,我了解对象、构造函数、原型等等,在css端,我知道带有关键帧、画布、坐标等动画,但从这个角度看,我知道那里编写的javascript可能有40-50%。
1)我知道声明了类和构造函数(这对于javascript来说是相对较新的吗?)
2) jQuery .each方法用于用setupLabels()附加标签A1、A2等。
3)具有多种不同的功能,可以显示刻度盘上穿孔的数字、移动手臂、移动can等功能。
这就是让我困惑的地方:
setPosition(x, y, callback){
$('.hand').on('transitionend', ()=>{
$('.hand').off('transitionend');
setTimeout(function(){
callback();
}, 500);
});
this.calculateVelocity(x, y, (velX, velY)=>{
$('.arm').css({
'top': (y + 35) + 'px',
'transition-duration': velY + 's'
});
$('.hand').css({
'left': (x + 5) + 'px',
'transition-duration': velX + 's',
'transition-delay': velY + 's'
});
});
}
calculateVelocity(x, y, callback){
var currentX = $('.hand')[0].offsetLeft;
var currentY = $('.arm')[0].offsetTop;
var velX = Math.ceil((Math.max(currentX, x) - Math.min(currentX, x)) / 70);
var velY = Math.ceil((Math.max(currentY, y) - Math.min(currentY, y)) / 70);
callback(velX, velY);
}
}我猜想this.calculateVelocity实际上是调用函数,而=>定义回调函数之后会发生什么呢?
如果是这样的话,setPosition中的回调是如何工作的,因为它还没有定义呢?
发布于 2016-12-01 08:17:19
JavaScript从在运行之前编译所有函数名的列表开始,因此calculateVelocity 已经定义了。另外,您是正确的,(velX, velY) => {}是回调,函数正在被调用。它采用了新的箭头函数格式。
以下两者是完全相同的:
this.calculateVelocity(x, y, (velX, velY) => {
...
});
this.calculateVelocity(x, y, function(velX, velY) {
...
});在setPosition内部,this引用全局对象。在这种情况下,calculateVelocity是全局对象上的一个函数,因此可以通过this.calculateVelocity调用它。
我还应该注意到,链接代码中的源JavaScript实际上是类型记录/es7。
https://stackoverflow.com/questions/40905585
复制相似问题