gpt4 book ai didi

javascript - onchange 事件在内部监听元素访问器的 setter 吗?

转载 作者:行者123 更新时间:2023-12-03 09:48:06 25 4
gpt4 key购买 nike

我知道,要注册我们自己的元素类型,我们使用

Object.defineProperties(ElementPrototype,{
get: function(){

},
set: function(newVal) {

}
});

现在,只要我不附加 onchange 监听器,它就可以很好地用于 value 属性,但如果我这样做,则永远不会调用此 setter,我能想到的一个原因是,此 onchange 在内部覆盖我的 setter 并放置自己的 setter ,这导致我的二传手永远不会被调用。这样做

elem.value = "newvalue";

不会触发我的 setter 函数。所以

首先我的结论正确吗?

第二个解决办法是什么?

编辑:-假设 ElementType 是我自己的元素副本,我不会尝试修改现有的标签元素,

最佳答案

主机对象只需要为 ECMAScript 功能提供最低限度的支持。请参阅ECMAScript §4 :“...主机对象,其描述和行为超出了本规范的范围,除了表明它们可以提供可以访问的某些属性以及可以从 ECMAScript 程序调用的某些函数”。

例如,浏览器不需要支持 DOM 对象的原型(prototype)继承(尽管大多数浏览器都支持)。在 ECMA-262 的各个部分中如何对宿主对象进行特殊处理也很明显,例如对于 typeof operator .

底线是宿主对象不需要支持 ECMAScript 的所有功能,您应该只期望它们支持通过已发布的文档提供的功能。

更一般地说,有一个原则是你不应该弄乱不属于你的元素。也就是说,除非您有明确的权限,否则不要向主机、内置或其他脚本对象添加属性和行为。主要原因是:

  1. 主机对象在不同主机中的实现方式可能不同,因此在一个主机中“有效”的内容可能在另一个主机中无效(或引发错误)。

  2. 通过脚本添加的功能可能会在宿主环境的更高版本中添加,从而导致不易解决的冲突(例如,在 ECMAScript ed 3 发布时引入的 jQuery 的 each 方法)规范,与稍后介绍的 ES5 forEach 方法具有不同的名称和采用不同顺序的参数)

  3. 如果通过第 3 方脚本修改主机或内置对象变得严格,功能测试将变得极其困难。测试某个功能很容易,但要判断您正在处理的特定功能的哪种实现(例如参数的顺序和数量)就不那么容易了,这进一步增加了复杂性。

修改其他 native 对象有时是可以的,例如如果您有一个插件,它可能有一个您可以修改的设置或参数对象,但您不应该替换整个方法。

如果您想扩展主机对象的行为,请创建一个代理并使用它。

关于javascript - onchange 事件在内部监听元素访问器的 setter 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30958289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com