当我尝试将自定义方法添加到对象原型时,我得到了错误



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

为什么会这样?如何将方法添加到对象原型中?

通常,添加到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";然后";测试";。

至于为什么这在JS中对你有效,而在TS中无效,如果没有更多信息,我无法确定。我想在你的TS代码中有一个库正在为。。在导致此错误的对象上循环。

最新更新