如果构造函数只是一个函数,'new'返回对象的原因而不是通常:
function One(message){
this.message = message;
}
One.prototype.getMessage = function() {
console.log(this.message);
}
我们不这样做:
function Two(message){
return {
message: message,
getMessage: function() {
console.log(this.message);
}
}
}
用法相同,结果(在这个简单的情况下)相同:
var o1 = new One('One');
o1.getMessage();
var o2 = new Two('Two');
o2.getMessage();
我得到了两个答案:
o2 instanceof Two
返回false 任何其他答案“为什么这是错的”?
答案 0 :(得分:3)
Option1将方法与类型相关联,这样您就不必在每次需要One
类型时重新定义该函数。这样可以提高性能并降低内存使用量。
在选项2中,每次实例化对象时都要重新定义动态对象。
答案 1 :(得分:0)
我所知道的是,当您向原型添加属性时,您确保在所有实例之间共享此属性,因此如果您将一个对象实例化一百次,则进行内存优化。
如果您来自像c#这样的典型OOP,那么向原型添加属性在某种程度上类似于定义静态字段
Public static string msg = " hello";
答案 2 :(得分:0)
执行100x new Two(message)
,您将创建100x getMessage function
。如果获取消息变得非常复杂,那将对内存产生很大的影响。
如果你将它写入原型,你将只获得一个函数no metters你将创建一个新的Two实例多少次。访问原型比直接访问慢一点。
如果它的单身,你不需要原型。
如果是工厂,请使用原型。
仅供参考:我正在使用es6,所以原型到处都是:)