重写命名函数的名称属性
Overriding name property of named functions
我有一个命名函数,如下所示:
var foo = function ninjaFunc(){
};
在控制台中检查它的名称,我发现了"ninjaFunc",这是预期的:
console.log(foo.name); //-> "ninjaFunc"
我刚刚将foo.name
重新分配给'aha'
。它运行时没有任何错误。
foo.name = 'aha'; //compiles without error
但重新检查foo.name
,我又找到了"ninjaFunc"。但我预计它会是"啊哈",因为编译器在分配它时没有引发错误
console.log(foo.name); //-> "ninjaFunc"
为什么会这样?我错过了哪个概念?
ECMAScript的标准参考是ECMA-262,即语言规范。当前标准ES5没有为函数实例指定名称属性。
然而,第6版的草案在§19.2.4.2中有规定:
此属性具有属性{[[Writable]]:false、[[Enumerable]]:false和[[Configuration]]:true}。
根据§6.1.7.1,它说你不能写(可写:false)。
实施可能已经实施了ed.6行为,也可能没有。您需要测试各种浏览器以确定支持(例如,IE 6和可能的更高版本不支持它)。
相关文章:
- 如何使对象属性函数成为事件发射器
- 属性函数的 JavaScript 初始值
- 类型错误: 无法设置未定义的属性<函数>
- Javascript set 属性函数不起作用
- 在循环中运行对象属性函数
- 为什么在枚举属性/函数时键长度不准确
- 主干模型获取属性函数返回上次更新的值
- 使用 Jquery 和对象属性函数时出现类型错误
- Javascript:属性函数中的引用
- 导出的目的是什么属性函数在挖空.js库中
- 检查全局属性/函数是否已在 JavaScript 中被覆盖
- 误解了输入文本值属性函数的正确使用
- 将onClick函数绑定到选项卡的href属性函数
- 当函数的属性函数被调用时,是否可以修改函数本身
- 命名对象属性函数
- Javascript -为什么要循环?(原型属性->构造函数属性->函数对象->构造函数属性)
- 如何从属性函数中引用上面的对象
- Javascript继承:子类型原型不能访问超类型的属性/函数
- 破坏性映射对象属性函数
- React.js:如何定义默认属性函数