Javascript 为什么我们需要打电话给';c、 设置绑定(c)和#x27;在这个脚本中?
这是示例中javascript的url: 下面是示例脚本的全文Javascript 为什么我们需要打电话给';c、 设置绑定(c)和#x27;在这个脚本中?,javascript,Javascript,这是示例中javascript的url: 下面是示例脚本的全文 var Canvas = require('../'); var line = require('bresenham'); var c = new Canvas(160, 160); function draw() { c.clear(); var t = new Date(); var sin = function(i, l) { return Math.floor(Math.sin(i*2*Math.PI
var Canvas = require('../');
var line = require('bresenham');
var c = new Canvas(160, 160);
function draw() {
c.clear();
var t = new Date();
var sin = function(i, l) {
return Math.floor(Math.sin(i*2*Math.PI)*l+80);
}, cos = function(i, l) {
return Math.floor(Math.cos(i*2*Math.PI)*l+80);
};
line(80, 80, sin(t.getHours()/24, 30), 160-cos(t.getHours()/24, 30), c.set.bind(c));
line(80, 80, sin(t.getMinutes()/60, 50), 160-cos(t.getMinutes()/60, 50), c.set.bind(c));
line(80, 80, sin(t.getSeconds()/60+(+t%1000)/60000, 75), 160-cos(t.getSeconds()/60+(+t%1000)/60000, 75), c.set.bind(c));
process.stdout.write(c.frame());
}
setInterval(draw, 1000/24);
我不太明白为什么
c.set.bind(c)
在行中
函数调用中,因为set
是一个函数。您正在将函数
对象作为参数传递。如果内部的set
函数使用this
,则this
的值取决于运行时调用的对象。要使其正确引用此,而不考虑调用对象,需要使用bind
这样,当一个
行
函数调用时,它的上下文设置为c
为什么?只是因为没有它就无法工作——你可以试试。或者您不明白它是如何工作的?要确定原因,请查看模块bresenham
,看看函数参数是什么,以及为什么它们是那样的。@Adam-我猜bresenham
的最后一个函数参数只是回调
,它刚刚被调用,因此,需要将thisValue绑定到画布而不是line()
函数。更有趣的是看看c.set()
如何处理这个
。