首页 > 解决方案 > 当我尝试向对象原型添加自定义方法时出现错误

问题描述

我想在打字稿中的对象原型上添加自定义方法

 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');
    };

为什么是这样 ?如何向我的对象原型添加方法?

标签: javascripttypescriptecmascript-6

解决方案


通常添加到 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 循环。


推荐阅读