使用原型和内联扩展对象有什么区别?
What is the difference between extending an object using prototype or inline?
有什么区别?有吗?
var Likes = function (el) {
this.el = $(el);
return this;
};
Likes.prototype.add = function (name) {
this.el.find('.no-results').remove();
$('<li>', { text: name }).appendTo(this.el);
};
:
var Likes = function (el) {
this.el = $(el);
this.add = function (name) {
this.el.find('.no-results').remove();
$('<li>', { text: name }).appendTo(this.el);
};
return this;
};
区别在于如何创建对象。当你在一个对象的原型上定义函数时,它会在该对象的每个后续实例中定义一次。
如果你在实例级声明函数,每次声明函数时,它们都会被重新定义。
它实际上对性能有影响http://jsperf.com/prototype-vs-instance-functions
对于将在构造函数的多个实例上重用的函数,使用原型通常被认为是最佳实践。例如,如果您正在使用new
操作符来创建构造函数的实例..
var Likes = function (el) {
this.el = $(el);
return this;
};
Likes.prototype.add = function (name) {
this.el.find('.no-results').remove();
$('<li>', { text: name }).appendTo(this.el);
};
var oneLike = new Likes();
var twoLike = new Likes();
var threeLike = new Likes();
由于add
是在对象的原型上定义的,所以它只定义一次,而不是每次实例化Likes
时。
是有区别的。
如果你使用原型对象,那么所有创建的"喜欢"对象将有相同的引用原型对象。但是如果你使用第二个方法(this.add),它将为每个创建的对象添加函数。
第一个方法比第二个方法更受欢迎
示例2是更好的实践,因为它适合于实现继承,而不是创建对象属性的浪费副本。
在没有继承的小型应用程序中,这两个示例之间可能没有太大的实际区别。但是,假设在使用继承的更复杂的应用程序中有10000个Likes
构造函数实例。对于第二个示例,它们中的每一个都将在本地接收add
函数的副本。
理论上,这可能会在较大的应用程序中导致内存瓶颈。另外,如果将来想要更改add
方法,则需要对每个本地对象都这样做。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 在Javascript中重新分配对象变量时,原始对象会发生什么
- 确定var是否是javascript中的elementFinder对象的方法是什么
- 在这个使用hasOwnProperty的对象扩展程序中有一个错误,I'我不确定那个bug是什么,也不确定这个扩展
- 用javascript修复这个JSON对象字符串最干净的方法是什么
- 从AngularJs获取谷歌地图对象的正确方法是什么
- 什么是“;原型;通过JavaScript中的Object Literal Notation创建的对象的链接
- 克服错误的更优雅的方法是什么:需要对象说明符.当通过JXA通过Messages发送SMS时,参数没有对象说明符
- XMLHttpRequest对象的open()和send()方法之间有什么区别
- 这两种不同的创建对象文字的方法有什么区别
- 什么'是从对象列表中一次编辑一个对象的正确Angular/Firebase方法
- 我需要使用什么语法来向一个对象的成员添加一个临时数组,该成员等同于一个字符串的通用列表
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- 在jquery中,从同一对象的属性设置输入字段和标签的正确方法是什么
- 什么是'值是引用'表示JavaScript对象
- localStorage-对象的getter-, setter-方法的目的是什么?
- 什么是 ClojureScript 类似地将不存在的对象值设置为 JavaScript 中的 null
- 返回多个变量的 JavaScript 函数:数组与对象.最佳实践是什么
- Javascript:将类/对象引用设置为 NULL,内存中的子对象/类会发生什么
- 通过传递日期来创建Javascript Date对象?什么是dateString