相关疑难解决方法(0)

箭头函数与函数声明/表达式:它们是等效/可交换的吗?

规范问题如果在用箭头函数替换函数声明/表达式后发现有关问题的问题,请将其作为此副本的副本关闭.

ES2015中的箭头功能提供了更简洁的语法.我现在可以用箭头功能替换所有函数声明/表达式吗?我需要注意什么?

例子:

构造函数

function User(name) {
  this.name = name;
}

// vs

const User = name => {
  this.name = name;
};
Run Code Online (Sandbox Code Playgroud)

原型方法

User.prototype.getName = function() {
  return this.name;
};

// vs

User.prototype.getName = () => this.name;
Run Code Online (Sandbox Code Playgroud)

对象(文字)方法

const obj = {
  getName: function() {
    // ...
  }
};

// vs

const obj = {
  getName: () => {
    // ...
  }
};
Run Code Online (Sandbox Code Playgroud)

回调

setTimeout(function() {
  // ...
}, 500);

// vs

setTimeout(() => {
  // ...
}, …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 arrow-functions

449
推荐指数
2
解决办法
12万
查看次数

Javascript对象如何引用值本身?

可以说我有以下javascript:

var obj = {
 key1 : "it ",
 key2 : key1 + " works!"
};
alert(obj.key2);
Run Code Online (Sandbox Code Playgroud)

"key1未定义"时出现此错误.我试过了

this.key1
this[key1]
obj.key1
obj[key1]
this["key1"]
obj["key1"]
Run Code Online (Sandbox Code Playgroud)

他们似乎从来没有定义过.

如何让key2引用key1的值?

javascript object

158
推荐指数
8
解决办法
9万
查看次数

ES6对象中的方法:使用箭头函数

在ES6中,这两个都是合法的:

var chopper = {
    owner: 'Zed',
    getOwner: function() { return this.owner; }
};
Run Code Online (Sandbox Code Playgroud)

并且,作为速记:

var chopper = {
    owner: 'Zed',
    getOwner() { return this.owner; }
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用新的箭头功能?在尝试类似的东西

var chopper = {
    owner: 'John',
    getOwner: () => { return this.owner; }
};
Run Code Online (Sandbox Code Playgroud)

要么

var chopper = {
    owner: 'John',
    getOwner: () => (this.owner)
};
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息,提示该方法无权访问this.这只是一个语法问题,还是你不能在ES6对象中使用fat-pipe方法?

javascript ecmascript-harmony ecmascript-6

70
推荐指数
3
解决办法
2万
查看次数

"箭头功能"在IE中不起作用,为什么?

下面的代码片段在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"));
Run Code Online (Sandbox Code Playgroud)

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

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

javascript internet-explorer

61
推荐指数
3
解决办法
6万
查看次数

让Mocha在运行下一个测试之前等待

有一些mocha测试需要先前函数调用的数据,但之后因为它使用了web服务,并且希望它在运行下一个测试之前确实等待预定的时间,例如:

var global;

it('should give some info', function(done) {
  run.someMethod(param, function(err, result) {
    global = result.global
  done();
  });
});

wait(30000); // basically block it from running the next assertion

it('should give more info', function(done) {
  run.anotherMethod(global, function(err, result) {
    expect(result).to.be.an('object');
  done();
  });
});
Run Code Online (Sandbox Code Playgroud)

任何想法,将不胜感激.谢谢!

javascript mocha.js node.js

14
推荐指数
4
解决办法
4万
查看次数

箭头函数中的“this”与对象字面量中的非箭头函数

在下面的代码中,在 obj1 的对象字面量中,我假设两个函数中的“this”都将引用 obj1,但在粗箭头函数中,它不是。有人可以解释为什么吗?我会假设这些函数要么是等效的,要么在胖箭头函数中,'this' 将在词法上定义为 obj1。

var obj1 = {
  name : 'name1',

  standardFunction : function() {
    console.log(this.name);        //  Refers to obj1
  },

  fatArrowFunction : () => {       //  Refers to the global object
    console.log(this.name);        
  }
}

obj1.standardFunction();
obj1.fatArrowFunction();
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

8
推荐指数
1
解决办法
5635
查看次数

为什么`this`在ES6的箭头功能中不起作用?

这是我的代码:

'use strict';

let obj = {
  username : 'Hans Gruber',
  hello: () => 'hello, ' + this.username
};
console.log(obj.hello());
Run Code Online (Sandbox Code Playgroud)

但输出是:hello, undefined.

我希望输出是:hello, Hans Gruber.

我想我还没有理解this箭头功能?谁能给我一个明确的解释?

javascript ecmascript-6

7
推荐指数
1
解决办法
1092
查看次数

箭头功能 - 为什么这会将全局对象打印到控制台?

为什么要将o.foo()全局对象打印到控制台?

let o = {
  foo: () => console.log(this),
  bar() { console.log(this); }
};

o.foo(); // Global object / undefined
o.bar(); // o
Run Code Online (Sandbox Code Playgroud)

我认为箭头函数的等价物可能是这样的(但它不是):

let o = {
    foo: function() {
        var self = this;
        console.log(self);
    },
    bar() {?    
        console.log(this);
    }
};

o.foo(); // o
o.bar(); // o
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

4
推荐指数
1
解决办法
345
查看次数

如何将箭头函数重写为常规函数并绑定上下文?

我正在检查ES6中引入的箭头功能.如果我有一段带有"addNinja"功能的代码:

 addNinja=(ninja)=>{
         ninja.id=Math.random();
         let ninjas=[...this.state.ninjas,ninja];
         this.setState({
             ninjas:ninjas
         })
        console.log(this.state);

 }
Run Code Online (Sandbox Code Playgroud)

有没有办法可以在没有箭头功能的情况下编写?

如果我考虑到这两个是相同的......

x=>x*2 

function(x){
return x*2;
}
Run Code Online (Sandbox Code Playgroud)

我将假设我可以重写addNinja函数,如下面的代码,但我收到一个错误.

 addNinja=function(ninja){
         ninja.id=Math.random();
         let ninjas=[...this.state.ninjas,ninja]; 
         this.setState({
             ninjas:ninjas
         })
        console.log(this.state);

 }
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 arrow-functions

2
推荐指数
1
解决办法
66
查看次数