如何在Element原型方法内部获取该方法自身的名称?
现有写法的核心问题
- 存在语法错误:你将方法挂载在
Element.prototype上属于实例方法,Element构造函数本身不存在getCssStyle属性,Element.getCssStyle会返回undefined,运行时会直接抛出类型错误。即便修改为Element.prototype.getCssStyle.name,也存在第二个问题。 - 稳定性差、耦合度高:如果后续其他代码重写了
Element.prototype.getCssStyle,该取值逻辑会拿到重写后方法的名称,无法匹配当前执行方法的实际名称。
最优符合规范的解决方案
利用ECMAScript标准中具名函数表达式的作用域特性即可:具名函数表达式的名称标识符是函数内部的只读局部变量,指向函数本身,完全不受外部赋值/重写影响,实现代码如下:
Element.prototype.getCssStyle = function getCssStyle(stylePropertyName) { // 直接访问当前函数作用域内的具名函数标识符即可 const protoName = getCssStyle.name; return protoName; }
备选方案(仅非严格模式可用)
如果你的运行环境不开启严格模式,也可以通过arguments.callee获取当前执行的函数本身再取名称,该写法不需要显式声明函数名,但严格模式下会被禁用,不推荐优先使用:
Element.prototype.getCssStyle = function(stylePropertyName) { const protoName = arguments.callee.name; return protoName; }
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

