Polyfill/fix用于在保留的JS单词(如'函数'
Polyfill/fix for using dot notation on reserved JS words like 'function'
这个问题是这个的后续问题
背景:
var a = function(){ console.log("function is() initialized"); };
// assign a property named 'function' to function 'a'
a.function = function afunction(f){ return (typeof f === 'function'? true: false); };
// Use our is function to test if a given variable is a function
a.function(a); // IE throws 'expected identifier' error v/s Chrome correctly outputs "true"
解决方案
使用括号符号以避免此处所述的干扰,即
a["function"](a)
而不是a.function(a)
后续问题
由于高级浏览器能够"绕过"调用a.function(a)
,是否有polyfill/fix可用于支持在保留的javascript单词上使用点表示法。在使用这个polyfill/fill之后,应该能够在旧的浏览器中继续使用点表示法(例如IE 8),即
允许使用a.function(a)
而不是a["function"](a)
我很确定不存在这样的polyfill,因为这种行为的差异取决于JavaScript语法的差异,JavaScript语法决定了如何将词法代码从一系列字符转换为可执行指令的解析树。
ECMAScript 3语法(IE8使用)允许在点后使用Identifier
访问点属性,但ECMAScript5语法(所有现代浏览器都使用)允许更宽的IdentifierName
跟随点。差异是显著的,因为Identifier
被定义为
标识符名称 但不是 保留字
因此,ECMAScript 3不允许点访问表达式中的保留字(如function
)存在于语法级别。
可以在IE8中纠正这种行为的polyfill需要在代码开始运行之前更改浏览器在解析时间的行为。脚本无法更改浏览器JavaScript解析器的行为。
理论上,可以通过ES5到ES3编译器运行代码,该编译器会自动将a.function
转换为a["function"]
。睫毛膏是我能找到的唯一适合你需求的项目,但需要注意的是,它的价格为980美元。
- 如何知道找到的单词是字符串的一部分还是JavaScript中的函数调用
- JavaScript 函数.返回单词出现的次数
- 为什么javascript函数名称custom是一个小写的单词,后跟一个大写的单词,就像'orangeCost'一样
- 如何在没有javascript中的split函数的情况下将字符串拆分为单词
- 我想使用replace函数扫描json对象,然后用字符串替换匹配的单词
- 编写函数,通过1个字符的JavaScript匹配单词
- 在 javaScript 中定义函数之前,什么意思是“一个单词:”
- 在双击/选择单词时在 chrome 扩展程序中运行函数
- 在 Javascript 中触发一个函数,如果单词在字典中
- 创建一个 JavaScript 函数来反转单词
- 在angularjs ng-change=“chk(query)”中,当键入单词后点击空格时调用函数
- Javascript函数,用于大写每个单词的首字母
- JavaScript字符,单词和空格计数函数
- Javascript函数生成符合元音和辅音模式的所有可能单词的列表
- 简化工作函数以替换特定单词
- 创建一个自动完成函数,不显示每个单词
- Javascript:使用.sort和compare函数查找数组中最长的单词
- Regex函数使单词标题大小写(包括连字符)
- Polyfill/fix用于在保留的JS单词(如'函数'
- Javascript的PHP函数:扫描字符串并在数组中添加单词