.call应该如何为ES6箭头函数工作(根据标准)
How is .call supposed to work for ES6 Arrow Functions (according to the standards)?
我正在使用ES6的交叉编译器(Babel,很快会是TypeScript),它目前不支持用=>语法生成的函数的正确.call
行为;当我用.call
调用它们时,它们的this
值仍然是我第一次创建它们时它们从父作用域继承的值,而不是我用.call
传递进来的第一个参数。
规范如下:
ArrowFunction没有为arguments、super、这个,或者new.target。任何对参数、super、this或的引用新的。ArrowFunction中的target必须解析为
。它固定在定义它的上下文中。你不能动态地改变它。特别是function。prototype。call上面写着:
如果func是一个箭头函数或绑定函数,则thisArg将被步骤5中的[[Call]]函数忽略。
如果您使用下面的methodical
函数,它将创建一个方法,其中this
作为回调的第一个参数传入。这样,您就拥有了胖箭头语法的所有好处(隐式返回,this
不会在随后的函数调用中丢失),但仍然可以将其作为方法使用。当然也有简写的方法语法,它基本上是创建一个传统的es5风格的函数(略有不同,因为它不能用new调用)。
const methodical = func => function(...args) {
return func(this, ...args)
}
const add = methodical(
(instance, name, value) => (instance[name] = value, instance)
)
const a = {
add
}
a.add('first', 1.23).add('second', 2.74)
add.call(a,'third', 3.11)
console.log(JSON.stringify(a, null, 2))
使用es2015速记方法代替
const b = {
add(name,value) {
this[name] = value
return this
}
}
b.add('first',1).add('second',2)
console.log(JSON.stringify(b))
相关文章:
- 咖啡的Javascript订单总数无法使函数正常工作.请协助
- removeClass函数没有'工作不正常
- 你能解释一下这个阶乘函数是如何工作的吗?
- JavaScript链接在点击时不起作用;函数在页面加载时工作
- jQuery加载的async和ready函数不工作
- 更改智能表中的页面将停止JQuery函数的工作
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- jQuery函数不能只在一个页面上工作
- 如何检查这个代码点火器php函数是否工作,该函数是否在ajax url中使用
- 从js引擎的角度来看闭包和构造函数是如何工作的
- appendChild在函数外部工作,但在函数内部不工作
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- 由于某种原因,我的JavaScript函数无法工作
- 为什么递归生成器函数没有't在ES2015工作
- 我需要一个jQuery函数来只工作在700px以上的屏幕大小,无法在我的代码中发现错误
- 从控制台中的工作函数转换为工作脚本.(请参阅编辑)
- Angular JS-工作函数中的“错误:[$interpole:interr]Can't interpole:
- 简化工作函数以替换特定单词
- 为什么不在回调中工作函数?
- InnerHTML不工作:函数未定义