d3.select(this)不能用箭头函数
d3中典型的数据绑定片段
const items = svg.selectAll('g')
.data(gdfs,(d)=> d.name); const enter = items.enter().append('g');
//console.log(enter);
//没有update()函数了,添加删除后,全部更新
enter.merge(items)
.attr('class',(d)=> d.name)
.each(function(d) {
const g = d3.select(this);
console.log('g',g);
//do some with g;
}); items.exit().remove();
}
对g元素如果需要进一步绑定数据进行操作,则调用each 传入匿名函数。 里面使用d3.select(this) ,这个d3 选择集,指向each对应的dom元素。
在这里,要注意this的问题。如果使用es6的箭头函数() =>{} ,会报错,必须使用传统的funcion(d){}
区别在这里,箭头函数不绑定this https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions
不绑定
this
在箭头函数出现之前,每个新定义的函数都有它自己的
this
值箭头函数不会创建自己的
this,它只会从自己的作用域链的上一层继承this
。
但是d3这里,显然是依赖局部的this的,用箭头函数,是找上一层的this,会报错。
——总之,用d3.select(this)的地方,就用传统的function就好了。反正也不是很多。
d3.select(this)不能用箭头函数的更多相关文章
- ES6 箭头函数中的 this?你可能想多了(翻译)
箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...
- ES6箭头函数与展开运算符
箭头函数:省去了关键字function和return: eg: reduce=(a,b)=>a+b;//返回a+b的值 redduce=(a,b)=>{console.log(a);con ...
- 箭头函数和Buffer对象
一.箭头函数 普通函数1 var add = function (a, b) { return a + b; } 普通函数2 function add (a, b) { return a + b; } ...
- 深入理解this机制系列第三篇——箭头函数
× 目录 [1]痛点 [2]解决 [3]基本用法[4]回调函数[5]注意事项 前面的话 this机制与函数调用有关,而作用域则与函数定义有关.有没有什么是可以将this机制和作用域联系起来的呢?本文将 ...
- Es6 箭头函数
1.单参数function cheng(a=3){ return a*a;}let cheng= (a=3)=>a*a;console.log(cheng(9));2.多参数functio ...
- 【javascript】箭头函数
ES6标准新增了一种新的函数:Arraw Function(箭头函数). x => x * x 这个函数相当于 function (x){ return x * x; } 题外话:user st ...
- JS中generater和箭头函数
generater跟函数很像: function* fn(x){ yield x; yield x++; return x;} 如上所示,generater用function*定义,可以用yield返 ...
- 箭头函数 Arrow Functions/////////////////////zzz
箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教程曾建议在HTML注释内包裹行内脚本,这样可以避免不支持JS的浏览器误将JS代码显示为文本.你会写这样的代码: < ...
- ES6里箭头函数的陷阱
ECMAScript 6新增了箭头函数 原来的匿名函数 function(){},现在可以简化成()=>{} 看起来高大上,像C#什么的语法. 但是箭头函数的this对象,不能更改,总是指向函数 ...
随机推荐
- 被fancybox坑的心路历程
今天项目中需要使用fancybox来展示图片,但是使用中发现fancybox没起作用,点击图片直接刷新了页面! fancybox的原理是通过给a标签绑定事件,使得a标签不在是直接跳转链接,而是把链接中 ...
- ARIA无障碍技术
ARIA Accessible Rich Internet Applications (ARIA) 规定了能够让 Web 内容和 Web 应用(特别是那些由 Ajax 和 JavaScript 开发的 ...
- mysql同步之otter/canal环境搭建完整详细版
接上一篇mysql 5.7多源复制(用于生产库多主库合并到一个查询从库). 这一篇详细介绍otter/canal环境搭建以及当同步出现异常时如何排查.本文主要参考https://blog.csdn.n ...
- 11:vue-cli脚手架
1.1 vue-cli基本使用 官网: https://github.com/vuejs/vue-cli 1.简介 vue-cli 是一个vue脚手架,可以快速构造项目结构 vue-cli 本身集成了 ...
- linux判断日志文件大小进行清理
脚本写了一个死循环,根据nohup产生的日志多大, 这里表示日志超过500M之后清理, 具体数字可自定义 睡眠数可自定义 #!/usr/bin/bash while true do s=`du -k ...
- 集合框架-Set集合
代码: Collection c = new ArrayList(); c.add("hello"); c.add("world"); c.add(" ...
- 标签无效 "/zabbix_export/date": "YYYY-MM-DDThh:mm:ssZ" 预计。
Centos7.5 使用导入percona模板的时候报错 百度给的解决方案是 将zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1. ...
- django基础 -- 4. 模板语言 过滤器 模板继承 FBV 和CBV 装饰器 组件
一.语法 两种特殊符号(语法): {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二.变量 1. 可直接用 {{ 变量名 }} (可调用字符串, 数字 ,列表,字典,对象等) ...
- topcoder srm 701 div1 -3
1.一堆石子有$n$个,Alice,Bob轮流拿,给定每个人每次可以拿的石子的数目的集合.谁先不能拿谁输.问谁能赢? 思路:对于先手来说,输赢的局面一定是从某个数字开始呈循环状态.所以找到这个循环开始 ...
- DataSnap下的分包获取
DataSnap下通过TQuery—TDataSetProvider—TClientDataSet获取数据,如果是主从数据,则每条主表记录都会触发从表数据的获取. 这种获取和组织数据的方式有一个问题: ...