为什么我们需要在此脚本中调用“ c.set.bind(c)”?

安东尼·孔

这是示例中javascript的网址:https : //github.com/madbence/node-drawille/blob/master/examples/clock.js

这是示例脚本的全文

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)line函数调用中这样

乔纳斯

因为set是一个功能。您正在传递Function对象作为参数。如果set内部使用函数,thisthis运行时的值取决于调用对象。要使其正确引用this而不管调用对象是什么,您都需要使用bind

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我们需要在C#中锁定并反对?

为什么我们需要C ++中的虚函数?

为什么我们需要在Windows C ++中链接kernel32.dll,user32.dll等?

为什么我们需要在 C++20 中的函数概念参数之后使用 auto?

为什么我们需要在C ++头文件中使用“ #if defined Identifier”?

为什么我们需要在C#中装箱和拆箱?

为什么我们需要声明枚举变量?(C)

为什么我们需要C ++中的纯虚拟析构函数?

为什么我们在C ++中需要飞船<=>运算符?

为什么我们需要C中的终止符

为什么在C#方法中我们需要多个`await`语句?

为什么我们需要C ++中的基本数据类型

为什么我们在这个程序中需要虚拟(Turbo C++)?

为什么我们必须在Java脚本(Razor)中对C#代码使用引号

为什么我们必须等待C#中的异步方法调用

为什么我们需要指针为Go / C中的变量分配值,而不是C#/ Java中的指针

为什么需要在此C ++模板中指定类型?

为什么我们需要对象发送者作为 c# 中的参数事件处理程序?

为什么在C语言的套接字编程中我们需要服务器本身的IP地址

为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

如果C ++编译为机器代码,为什么我们需要安装“运行时”?

在 C 中使用指针时,我们何时以及为什么需要使用 malloc?

C 为什么我们需要`execv()` 进行重定向?

为什么我们需要进行软件复位,I2C 协议?

为什么需要在 JS 中等待 AJAX 调用,而在 C# 中不需要?

在C ++中我们需要双重调度/访问者的情况究竟发生了什么

为什么我们不能在C#中的结构中定义数组

请说明条件变量在c ++线程中的用法,以及为什么我们需要与此一起使用`unique_lock`和`mutex`

为什么向上转换可以直接在c#中完成,但是为了向下转换,我们需要强制转换?