繁体   English   中英

为什么这个箭头函数在 IE 11 中不起作用?

[英]Why doesn't this arrow function work in IE 11?

下面的代码在 IE 11 中不起作用,它会在控制台中引发语法错误

g.selectAll(".mainBars")
    .append("text")
    .attr("x", d => (d.part == "primary" ? -40 : 40))
    .attr("y", d => +6)
    .text(d => d.key)
    .attr("text-anchor", d => (d.part == "primary" ? "end" : "start"));

使用d3.js二部图进行可视化

此代码导致上述语句中的问题d=>(d.part=="primary"? -40: 40)

您正在使用箭头函数。 IE11 不支持它们。 改用function函数。

这是Babel对 ES5 翻译:

g.selectAll(".mainBars").append("text").attr("x", function (d) {
  return d.part == "primary" ? -40 : 40;
}).attr("y", function (d) {
  return +6;
}).text(function (d) {
  return d.key;
}).attr("text-anchor", function (d) {
  return d.part == "primary" ? "end" : "start";
});

由于没有任何代码使用this ,您不必担心保留箭头函数的this行为(因为传统函数通过它们的调用方式获得this ,但箭头函数关闭this )。 但是,如果代码确实使用了this并且您希望它的行为类似于箭头函数,那么您将需要使用通常的技术

如果您需要支持 IE 11,请避免使用箭头函数,因为它不受支持

将它们更改为常规函数,您的代码应该可以按预期工作

g.selectAll(".mainBars").append("text").attr("x",function(d) { 
  return d.part=="primary"? -40: 40;
}).attr("y",function(d){
  return +6;
}).text(function(d) { 
  return d.key;
}).attr("text-anchor", function(d) { 
  return d.part=="primary"? "end": "start";
});

一般来说,在箭头函数成为箭头函数之前,它们是常规的 JS function 所以对于 IE11,我们只需要及时退后一步

var fruits=["apple","banana","orange"];

var modernResult=fruits.find(e => e.includes("nana"));
console.log(modernResult);

var IEresult=fruits.find(function(e){return e.includes("nana")});
console.log(IEresult);

IE 目前不支持箭头符号,但有一种方便快捷的方法可以将ES6代码转换为ES5.1以便在IE工作。 访问Babel网站,然后将您的代码粘贴到左侧框中,并复制已转换为早期JavaScript版本的右侧框中的代码。

例如,您的代码被转换为:

"use strict";

g.selectAll(".mainBars").append("text").attr("x", function (d) {
   return d.part == "primary" ? -40 : 40;
}).attr("y", function (d) {
   return +6;
}).text(function (d) {
   return d.key;
}).attr("text-anchor", function (d) {
   return d.part == "primary" ? "end" : "start";
});

Internet Explorer(IE) 根本不支持 ES6 功能,但你可以安装BabelJS 但是您也可以改为编写 vanillaJS 函数。

例如:

const hasBrownEyes = eye.color === "brown" ? true : false

或者只是 vanilla.js:

var hasBrownEyes = false; // default answer, it will be overwritten if it has a brown eye

if (eye.color === "brown") {
    return true;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM