You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:12:29