Javascript 为什么我们需要打电话给';c、 设置绑定(c)和#x27;在这个脚本中?

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

这是示例中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)*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()
如何处理
这个