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

标签 javascript

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

Object.clone = function() {

}

此语法是否与其他仅带有句点的函数名称一样,还是实际上添加到了 Object 类中?这与原型(prototype)方法相同吗?与仅进行函数克隆相比,这样做(或使用原型(prototype))有什么优点/缺点?

最佳答案

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

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

不过,对非对象这样做并不是一个好习惯。

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

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

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

var MY = {};

MY.clone = function(){};

关于Javascript:向对象类添加方法的优点/缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19440956/

相关文章:

javascript - 以 15 分钟为增量获取时间,直到特定时间

javascript - Express.js - 如何检查 header 是否已发送?

javascript - 当图像都缩放时,如何正确计算图像并将其放置在另一个图像的顶部 - 跨浏览器?

javascript - 将鼠标悬停在另一个 div 上时,将某个 div 的宽度增加 10%

javascript - 如何计算行中的元素并在之后追加 div

javascript - rails : Appending and Interpolating Code in Javascript

javascript - JSON.parse() 在内部使用 eval() 吗?

javascript - 只允许将两种类型的字符插入到输入字段中

javascript - Angular - ViewChild(指令)在指令中返回未定义

javascript - d3.js 强制折叠标签