我在这里有一个高阶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
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 …
关于总结问题的标题 - 这是代码示例:
!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) 我找到了一个脚本示例,其中有一行代码如下所示:
fn = (arg1) => (arg2) => {
//do something with arg1 and arg2
}
Run Code Online (Sandbox Code Playgroud)
我想知道这里到底发生了什么,它看起来像一个"正常"的功能?
我已经在使用react es6但仍然在这种情况下,我不知道如何避免使用它this:
const that = this;
UploadApi.exec(file).then(data => {
that.setState({ loading : false});
});
Run Code Online (Sandbox Code Playgroud) 这个问题可能已经被问到了。从文档中,我们可以将 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]返回的是什么?
我有一个服务,在构造函数中,我正在运行一种方法来获取一些数据。我可以看到数据,然后将其传递给预定义的变量。
像这样:
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”变量,并且可以看到它是从构造函数内部的方法传递的,但是当我在另一个方法上尝试相同的操作时,却无法定义。
我怎样才能解决这个问题?
我正在检查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 新手,试图弄清楚如何访问动态生成的按钮的数据属性值。我将来自数据库的 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。谢谢大家。祝你今天过得愉快 :)
我不明白 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 ×9
ecmascript-6 ×6
reactjs ×2
angular ×1
angular6 ×1
iife ×1
jquery ×1
node.js ×1
prototype ×1
scope ×1
this ×1
typescript ×1