博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript(ES5)使用保留字作函数名
阅读量:5760 次
发布时间:2019-06-18

本文共 1302 字,大约阅读时间需要 4 分钟。

ES5同意直接使用保留字作为属性名。但却不同意直接使用保留字作为函数名

设现有类NSMap,若要给NSMap的原型加delete方法,如

function NSMap(){}NSMap.prototype.delete=function delete(){};

则浏览器解析报错

SyntaxError: Unexpected token delete

那么,为什么native code的Map能够办到?


后来想到标识符能够由除ASCII特殊字符以外的大部分Unicode字符组成,方案来了:

//1.从保留字中随便挑个字符出来,如字符t,算出字符t的十六进制charCode。

"t".charCodeAt(0).toString(16)//"74"

//2.尝试将t用\x74表示。使用dele\x74e作为函数名,不行

NSMap.prototype.delete=function dele\x74e(){	};

//3.尝试将t用\u0074表示,使用dele\u0074e作为函数名,总算不报错了

NSMap.prototype.delete=function dele\u0074e(){	};

//(这里有点不解。\x74和\u0074不是同一个意思吗,有可能是因解析器的性能考虑而不支持\x)

//4.假设函数是独立声明的,引用函数也不得直接使用字面保留字

function dele\u0074e(){	}NSMap.prototype.delete=dele\u0074e;

//用得较多时,能够參照Chrome底层JavaScript源代码那样写

InstallFunctions(NSMap.prototype,DONT_ENUM,[	"extends",function ex\u0074ends(){			},	"delete",function dele\u0074e(){			}]);


另附上一个转义函数

function toCharCodeString(){	return Array.prototype.map.call(new String(this),function(c){		var code=c.charCodeAt(0),			hex=code.toString(16);		//return code>0xff?

// "\\u"+"000".substr(0,4-hex.length)+hex: // "\\x"+"0".substr(0,2-hex.length)+hex; return "\\u"+"000".substr(0,4-hex.length)+hex; }).join(""); } toCharCodeString.call("delete"); // "\u0064\u0065\u006c\u0065\u0074\u0065" toCharCodeString.call("Unicode字符"); // "\u0055\u006e\u0069\u0063\u006f\u0064\u0065\u5b57\u7b26"

转载地址:http://ecmkx.baihongyu.com/

你可能感兴趣的文章
c# redis笔记
查看>>
AP广播多VLAN SSID
查看>>
glusterfs命令简介
查看>>
MySQL 线上配置文件
查看>>
Linux 文件属性和默认权限
查看>>
python核心编程:学习笔记2--字符串,列表,元组,映射和集合
查看>>
discuz X2 apache下伪静态规则
查看>>
SpringBoot环境搭建
查看>>
iposdb数据库 date函数优化
查看>>
我的友情链接
查看>>
Mysql清理二进制日志的技巧
查看>>
awk学习笔记六-读取命令行参数
查看>>
VMWare的报价
查看>>
pandas中series填补NAN
查看>>
文件服务器同步解决方案rsync
查看>>
Java中List、Set和Map的区别--转载
查看>>
使用Openstack需要考虑的因素(写给决策者)
查看>>
SICP 1.25 1.26
查看>>
CS224n笔记18 挑战深度学习与自然语言处理的极限
查看>>
ActionScript 3.0 记要(1): 基本语法
查看>>