javascript - 当我尝试向对象原型添加自定义方法时出现错误
问题描述
我想在打字稿中的对象原型上添加自定义方法
Object.prototype['someMethodForObject'] = function() {
console.log('do something ');
}
之后我得到
value.match is not a function at WebAnimationsStyleNormalizer.normalizeStyleValue (browser.js:2008)
但是当我尝试用它做同样的事情时String
它可以工作 - 我没有错误
String.prototype['someMethodForString'] = function (length: number) {
console.log('do something');
};
为什么是这样 ?如何向我的对象原型添加方法?
解决方案
通常添加到 JS 全局构造函数的原型是一个坏主意。“WebAnimationStyleNormalizer”中可能有代码(不确定那是什么)正在做类似的事情,for (const value in obj)
并且由于 obj 是一个对象并继承了Object
' 的原型,突然你someMethodForObject
就在那个循环中。
以下面的代码为例
const obj = { a: 5 }
for (const value in obj) {
console.log(value)
}
将记录“a”。
在哪里
Object.prototype.test = function() { }
const obj = { a: 5 }
for (const value in obj) {
console.log(value)
}
现在将记录“a”,然后是“test”。
至于为什么这在 JS 中对您有用,但对 TS 无效,如果没有更多信息,我无法确定。我想在您的 TS 代码中有一个库在导致此错误的对象上执行 for..in 循环。
推荐阅读
- javascript - ESLint 规则阻止用户禁用 ESLint 规则
- arrays - PowerShell 逐行读取文件,正则表达式每行并将项目存储在数组中
- python - 在不同的进程中访问事件循环
- python - 解析数据是字符破解现象
- javascript - 作为新的 JSON 对象返回
- assembly - 我可以在不使用 EBX 的情况下编写程序集吗?
- javascript - useEffect 仅在将值添加到数组时运行,但在删除值时不运行
- c - 为什么要使用 mmap 函数通过标准输入创建零需求虚拟内存区域?
- java - Spring ReactiveMongoTemplate 使用嵌入对象查询对象
- error-handling - send() 接受 1 到 2 个位置参数,但给出了 3 个