【问题标题】:When i try to add custom method to object prototype i get error当我尝试向对象原型添加自定义方法时出现错误
【发布时间】:2021-04-15 05:30:48
【问题描述】:

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

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

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

【问题讨论】:

  • tring 不起作用,您缺少Svalue.match is not a function 作为错误消息也没有任何意义,您没有在任何地方使用 .match..?
  • 这是我的粘贴中的类型错误。我编辑了问题。在我的代码中字符串有效,但是当尝试在对象上添加方法时它不起作用。我知道它不会产生任何感觉它与打字稿有关...
  • value.match is not a function at WebAnimationsStyleNormalizer.normalizeStyleValue (browser.js:2008) 是 JavaScript 错误,而不是 TypeScript 错误
  • 您确定错误与向Object.prototype 添加方法有关吗?
  • 您的代码对我有用。我认为您看到了与您的代码无关的其他错误。

标签: javascript typescript ecmascript-6


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-07-28
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多