Javascript:向对象类添加方法的优缺点是什么

Javascript: What are the pros/cons of adding methods to an object class?

本文关键字:方法 优缺点 是什么 添加 对象 Javascript      更新时间:2023-09-26

我见过有些人向对象类添加方法,如下所示:

Object.clone = function() {
}

此语法是否就像任何其他仅带有句点的函数名称一样,或者这实际上是添加到 Object 类中?这与原型方法相同吗?这样做(或使用原型)与仅制作函数克隆有什么利弊?

在 JavaScript 中,一切都是对象,这意味着您可以将属性附加到任何对象,就像使用对象文字一样,例如:

var arr = [1,2,3];
arr.property = 'foo';

但是,在非对象上这样做并不是好的做法。

每个对象都有一个构造函数,因此数组具有Array构造函数,对象具有Object构造器等。对象的prototype是其上下文是实例的对象,当您使用 new 实例化时,这会发生在自定义对象上。

将方法附加到prototype时,它将在该对象的所有实例之间共享。当您将函数附加到构造函数时,您基本上是在命名空间下隐藏全局(取决于范围);上下文不是实例,也不依赖于实例。您可以将这些函数视为静态方法。

扩展Object.prototype很麻烦,因为这是"母对象"。扩展Object构造函数本身并不那么糟糕,但不是最佳实践。最好的解决方案,只需创建自己的命名空间:

var MY = {};
MY.clone = function(){};

无需向内置Object构造函数添加静态函数。如果这样做,代码健壮性也存在问题,因为某些当前和未来的环境可能会引入同名的内置方法,然后会出现名称冲突。

只需将方法添加到自己的对象中即可。