哪个是更好的Javascript对象模式...
function dog(name) {
this.name = name;
this.getName = function() {
return this.name;
};
};
OR
function cat(name) {
this.name = name;
};
cat.prototype.getName = function() {
return this.name;
};
为什么?
-----编辑
是否有人使用更多内存?
一个或多或少的“CPU”比另一个更强?
哪个更易于维护?
哪个更具可扩展性?
哪个更具可读性?
答案 0 :(得分:7)
getName
函数。在2中,使用此构造函数创建的所有对象将共享原型/ getName
。在一个地方更改它,它将针对每个实例进行更改。
在特殊场合(如复杂的继承链),您可能需要使用第一个,但要注意它的缺点。
This blog post可能会帮助您更好地理解原型继承。
答案 1 :(得分:2)
这里只是个人意见......但我更喜欢长期可维护性的“狗”式符号。
所有“狗”代码都包含在狗定义中。想象一下,5年后,“下一个人”被指示删除hasTail属性。无论有多少其他对象/属性/等。从现在到现在都定义了,他会在狗的定义中找到它。
为了进行比较...想象一下5年后,“下一个人”被指示从“cat”中删除hasTail属性。他必须扫描/ grep / ctl + f来自animals.js文件的hasTail,并希望他删除正确的。
答案 2 :(得分:1)
我个人更喜欢在对象中包装函数定义(例如狗符号),因为它更像是Java / PHP“类”。 但是,使用dog表示法会降低内存效率,因为每次创建新实例时都会复制函数(请参阅此article)
答案 3 :(得分:0)
我使用cat
表示法,因为它不会引入不必要的闭包,这可能效率不高。
但是,我从来没有测试过 它们的效率如何,而且在这个超优化JavaScript引擎时代,它可能没有那么大的差别。
答案 4 :(得分:0)
我更喜欢使用原型的cat方法。
.prototype.
。