如何获取GlobalEventHandlers的所有属性列表并检测属性是否存在?
如何检测字符串是否为GlobalEventHandlers的属性?
嘿,要实现你想要的功能——判断一个字符串是不是GlobalEventHandlers的属性,其实可以分两步来做:先收集它的所有属性,再做检测。
第一步:获取GlobalEventHandlers的所有属性列表
GlobalEventHandlers是一个DOM接口,没法直接实例化,所以我们得操作它的prototype对象。为了不遗漏任何属性(包括原型链上继承来的),可以遍历原型链,把所有自有属性(哪怕是不可枚举的)都收集到一个Set里——用Set的好处是后续查找速度特别快。
第二步:实现检测函数
有了属性集合之后,写个检测函数就很简单了。这里要注意:DOM的事件属性都是小写命名的(比如onclick),而你示例里用了驼峰式的onClick,所以统一把传入的字符串转成小写再判断,能避免大小写带来的误判。
下面是完整的示例代码:
// 收集GlobalEventHandlers的所有属性 function getGlobalEventHandlersProperties() { const props = new Set(); let current = GlobalEventHandlers.prototype; // 遍历原型链,收集所有自有属性(包括不可枚举) while (current) { Object.getOwnPropertyNames(current).forEach(prop => { props.add(prop); }); current = Object.getPrototypeOf(current); } return props; } // 预生成属性集合,避免重复遍历 const globalEventProps = getGlobalEventHandlersProperties(); // 实现检测函数 function isGlobalEventHandlerProp(prop) { // 统一转小写,兼容驼峰写法 return globalEventProps.has(prop.toLowerCase()); } // 测试你的示例 console.log(isGlobalEventHandlerProp('onClick')); // true console.log(isGlobalEventHandlerProp('fizzBuzz')); // false
补充说明
如果你确定只需要检测GlobalEventHandlers自身定义的属性(不需要继承来的),可以简化收集逻辑,直接取它原型的自有属性:
const globalEventProps = new Set(Object.getOwnPropertyNames(GlobalEventHandlers.prototype));
内容的提问来源于stack exchange,提问作者ESR
相关产品推荐
相关产品推荐

