我见过一些人向对象类添加方法,如下所示:
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/