Javascript:向对象类添加方法的优缺点是什么
Javascript: What are the pros/cons of adding methods to an object class?
我见过有些人向对象类添加方法,如下所示:
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
构造函数添加静态函数。如果这样做,代码健壮性也存在问题,因为某些当前和未来的环境可能会引入同名的内置方法,然后会出现名称冲突。
只需将方法添加到自己的对象中即可。
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- toBoolean方法类似于toString
- 如何在单击复选框后调用控制器方法
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- toLocaleDateString和toLocaleString方法不尊重机器时区
- Javascript:向对象类添加方法的优缺点是什么
- mongoDB——存储相同数据的两种方法的优缺点
- 通过这两种不同的方法调用jQuery功能的优缺点是什么