gpt4 book ai didi

javascript - 为什么扩展 native 对象是一种不好的做法?

转载 作者:IT王子 更新时间:2023-10-29 02:39:46 24 4
gpt4 key购买 nike

每个 JS 意见领袖都说扩展 native 对象是一种不好的做法。但为什么?我们的表现会受到影响吗?他们是否担心有人“以错误的方式”这样做,并向 Object 添加可枚举类型,实际上破坏了任何对象上的所有循环?

TJ Holowaychukshould.js例如。他adds a simple getterObject 并且一切正常(source)。

Object.defineProperty(Object.prototype, 'should', {
set: function(){},
get: function(){
return new Assertion(Object(this).valueOf());
},
configurable: true
});

这真的很有道理。例如,可以扩展 Array

Array.defineProperty(Array.prototype, "remove", {
set: function(){},
get: function(){
return removeArrayElement.bind(this);
}
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);

有反对扩展原生类型的论点吗?

最佳答案

当你扩展一个对象时,你改变了它的行为。

更改仅由您自己的代码使用的对象的行为是可以的。但是,当您更改其他代码也使用的某些行为时,您就有可能破坏其他代码。

当方法被添加到 javascript 中的对象和数组类时,破坏某些东西的风险非常高 - 由于 javascript 的工作方式。多年的经验告诉我,这种东西会导致 javascript 中出现各种可怕的错误。

如果您需要自定义行为,最好定义自己的类(也许是子类)而不是更改 native 类。这样你就不会破坏任何东西。

能够在不创建子类的情况下改变类的工作方式是任何优秀编程语言的重要特征,但必须很少使用并谨慎使用。

关于javascript - 为什么扩展 native 对象是一种不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14034180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com