javascript扩展预构建原型的性能
许多人认为,为字符串、数组或对象扩展预先构建的原型是不好的做法 然而,其他人说它也有糟糕的性能影响——这是有道理的,因为我假设在某种排序哈希表中的缓存方法现在是无效的,因为您可以更改该方法 我想知道的是,如果在执行开始时,在使用原型链中包含此原型的任何对象之前,您所有的原型都扩展了一次本机类型,那么这还会有性能问题吗javascript扩展预构建原型的性能,javascript,compilation,prototype,Javascript,Compilation,Prototype,许多人认为,为字符串、数组或对象扩展预先构建的原型是不好的做法 然而,其他人说它也有糟糕的性能影响——这是有道理的,因为我假设在某种排序哈希表中的缓存方法现在是无效的,因为您可以更改该方法 我想知道的是,如果在执行开始时,在使用原型链中包含此原型的任何对象之前,您所有的原型都扩展了一次本机类型,那么这还会有性能问题吗 我问这个问题的原因是因为我正在开发一个编译成javascript的系统。我不关心javascript中的错误做法,但我绝对关心性能 我认为性能不是真正的问题。真正的问题是: O
我问这个问题的原因是因为我正在开发一个编译成javascript的系统。我不关心javascript中的错误做法,但我绝对关心性能 我认为性能不是真正的问题。真正的问题是:
Object.prototype.toString = () => "whoops";
console.log({} + ", whats going on here?!");
像@Jonas say一样,性能很可能不会成为问题 事实上,扩展原型是许多Pollyfill的工作方式 但你必须问的问题是,你是否计划使用任何第三方LIB,或者你是否计划将其制作成一个库供其他人使用。如果是这样,避免覆盖内置原型,因为它可能会破坏很多东西 如果这只是在内部使用,我看不出有任何问题,只要你不做一些愚蠢的事情内置的当然
为了更加安全,我还考虑在所有方法的前面加上一些不太可能成为规范一部分的内容。。如。。String.prototype.MyCapitalizer,我非常怀疑它是否会成为规范的一部分。对,但为了我的使用,我正在编译javascript,所以我不介意完全意外的行为。我所关心的是我的Linq表达式树和编译后的javascript之间的契约是否满足。您如何知道性能不会成为问题?我可以很容易地看到一个系统,它有原生的内置方法,比如indexOf。但是,如果编辑数组类型的原型,此系统可能会退回到始终检查数组原型中是否存在indexOf方法。这些方法将具有奇怪的数字名称,如123_method_toString或短字符串,如3。您如何知道性能不会成问题?因为我说过->避免重写内置原型的重写indexOf当然不是一个好主意,如果性能是关键的。123\u method\u toString这不是一个有效的方法名,所以你不能对它们使用点符号。my123\u method\u toString&my3或某种前缀会更好。对不起,这是method\u name{random number}。无论如何,你能解释一下为什么在内置方法中重写内置原型会影响性能吗?你有确凿的证据证明这一说法吗?