相关疑难解决方法(0)

为什么我不能返回箭头功能?

我在这里有一个高阶sorta函数.

虽然这按预期工作:

var square = (a) => a * a;

var callAndLog = (func) => {
  return function () {
    var res = func.apply(undefined, arguments);
    console.log("Result is: " + res);
    return res;
  }
};

var squareAndLog = callAndLog(square);

squareAndLog(5);  // Result is 25
Run Code Online (Sandbox Code Playgroud)

这里,当我返回一个箭头功能时,它不起作用:

var square = (a) => a * a;
var callAndLog = (func) => {
  return (() => {
    var res = func.apply(undefined, arguments);
    console.log("Result is: " + res);
    return res;
  })
};
var squareAndLog = callAndLog(square); …
Run Code Online (Sandbox Code Playgroud)

javascript higher-order-functions ecmascript-6 arrow-functions

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

node - this.func()不是函数

function Job(name, cronString, task) {
    "use strict";

    this.name = name;
    this.cronString = cronString;
    this.isReady = false;
    this.task = task;
}

Job.prototype.performTask = (db, winston) => {
     "use strict";
    const Promise = require("bluebird");
    let that = this;
    return new Promise((resolve, reject) => {
        let output = "";
        let success = true;

        try {
            output = that.task();
        }
        catch(error) {
            success = false;
            reject(error);
        }

        if(success) {
            resolve(output);
        }
    });
};

module.exports = Job;
Run Code Online (Sandbox Code Playgroud)

这里的Javascript新手.当我创建一个Job对象并调用该performTask方法时,我得到"that.task不是一个函数".不应该this在方法的最开头performTask …

javascript scope prototype this node.js

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

为什么ES6 IIFE和ES5 IIFE的执行环境不同?

关于总结问题的标题 - 这是代码示例:

!function() {
    console.log(this); // global object
}();

(function() {
    console.log(this); // global object
})();

() => {
    console.log(this); // {}
}();

var x = (function() {
    console.log(this); // global object
})();
Run Code Online (Sandbox Code Playgroud)

箭头功能背后发生了什么?如果我想在ES5中使用该范围,据我所知,我必须将执行绑定到一个空对象,如下所示:

!function() {
    console.log(this); // global object
}.bind({})();
Run Code Online (Sandbox Code Playgroud)

javascript iife executioncontext ecmascript-6

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

多个lambda函数如何工作?

我找到了一个脚本示例,其中有一行代码如下所示:

fn = (arg1) => (arg2) => {
    //do something with arg1 and arg2
}
Run Code Online (Sandbox Code Playgroud)

我想知道这里到底发生了什么,它看起来像一个"正常"的功能?

javascript ecmascript-6

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

避免使用额外的变量来存储es6中的引用

我已经在使用react es6但仍然在这种情况下,我不知道如何避免使用它this:

const that = this;

UploadApi.exec(file).then(data => {
    that.setState({ loading : false});
});
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 reactjs

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

将 thisArg 传递给 map 函数

这个问题可能已经被问到了。从文档中,我们可以将 a 传递thisVariable给 map 函数。

var foo=[1,2].map(function(){return this.length},[2,4]); // [2,2]
Run Code Online (Sandbox Code Playgroud)

然而,ES6 中的这种语法返回了其他东西

var foo=[1,2].map(_ => this.length ,[2,4]); // [0,0]
Run Code Online (Sandbox Code Playgroud)

[0,0]返回的是什么?

javascript

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

Angular 6-将数据传递到类变量时变得不确定

我有一个服务,在构造函数中,我正在运行一种方法来获取一些数据。我可以看到数据,然后将其传递给预定义的变量。

像这样:

export class SentinelService {

  configuration;

  constructor() {


    this.electronService.ipcRenderer.on('config' , function(event , data) {

      this.configuration = data; // pass the data to configuration variable

      console.log(this.configuration.name); // Check it ... I can see the value here


    });

  }


  myMethod() {

    // Try it here
    console.log(this.configuration.name); // I get Undefined

  };


  ...
Run Code Online (Sandbox Code Playgroud)

尽管我已经将值分配给“ configuration”变量,并且可以看到它是从构造函数内部的方法传递的,但是当我在另一个方法上尝试相同的操作时,却无法定义。

我怎样才能解决这个问题?

typescript angular angular6

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

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

我正在检查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
查看次数

无法获取 jQuery 中动态生成的按钮的数据属性值

我是 JavaScript 新手,试图弄清楚如何访问动态生成的按钮的数据属性值。我将来自数据库的 ID 传递给“data-id”属性。下面是我的按钮动态生成的代码

<button class='btn btn-sm btn-primary aButton' data-id='1234'></button>
<button class='btn btn-sm btn-primary aButton' data-id='12345'></button>
<button class='btn btn-sm btn-primary aButton' data-id='12346'></button>
<button class='btn btn-sm btn-primary aButton' data-id='12347'></button>
Run Code Online (Sandbox Code Playgroud)

现在我想使用 jquery 访问这些按钮 onclick 来执行一些操作。下面是我的代码

$(document).on('click', '.aButton', () => {
    let id = $(this).attr('data-id');
    console.log(id);
})
Run Code Online (Sandbox Code Playgroud)

上面的控制台给我“未定义”的粗箭头功能。当我尝试对 function () {} 执行相同操作时,它为我提供了存储在按钮的 data 属性中的动态 ID。

这是怎么回事?有没有更好的方法来获取点击按钮的动态ID。谢谢大家。祝你今天过得愉快 :)

javascript jquery

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

使用 ES6 语法在 React 中未定义 setState 函数?

我不明白 React 应用程序中 vanilla javascript 和 ES6 之间的语法差异。我的第一个不起作用的代码是

class App extends Component{
constructor(props){
super(props);

this.state = {videos:[]};

YTSearch({key: API_KEY,term :'surfboards'},function(videos){
  this.setState({videos : videos});
});
}
Run Code Online (Sandbox Code Playgroud)

这会在控制台中出现“无法读取未定义属性”的“setState”错误

但将语法更改为

YTSearch({key: API_KEY,term :'surfboards'},(videos)=>{
   this.setState({videos : videos});
});
Run Code Online (Sandbox Code Playgroud)

解决问题。两者不是一回事(我可能错了)。使用

function(videos){}
Run Code Online (Sandbox Code Playgroud)

(videos) => {}
Run Code Online (Sandbox Code Playgroud)

我对 javascript 不满意,因此感谢您的任何帮助。

javascript ecmascript-6 reactjs

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