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

时间:2013-10-18 03:08:39

标签: javascript

我见过有些人像这样在对象类中添加方法:

Object.clone = function() {

}

这个语法就像任何其他函数名只有句号或者这实际上是否添加到Object类?这和原型方法一样吗?这样做(或使用原型)与仅制作函数克隆的优点/缺点是什么?

2 个答案:

答案 0 :(得分:2)

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

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

尽管如此,对非物体这样做是不好的做法。

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

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

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

var MY = {};

MY.clone = function(){};

答案 1 :(得分:1)

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

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