我想学习使用JavaScript原型的优点。对象原型使用正在提高性能。 我希望通过使用内存来看到这一点。
案例-1
var Foo1 = function (name) {
this.name = name;
getFirstName = function() { return "name1"; };
getLastName = function() { return "name2"; };
};
for (var i = 0; i < 1000; i++) {
var foo1 = new Foo1();
}
案例-2
var Foo2 = function (name) {
this.name = name;
};
Foo2.prototype = {
getFirstName: function () { return "name1"; },
getLastName: function () { return "name2"; },
};
for (var i = 0; i < 1000; i++) {
var foo2 = new Foo2();
}
哪种情况比使用内存更多?
我可以学习案例的内存使用情况吗?
案件的内存使用有何不同?
答案 0 :(得分:2)
如果您定义function
或object
属于prototype
,那么它将由所有实例共享,并且使用new
创建对象不会创建自己的实例功能/对象。在这个意义上,定义属于原型的东西使用更少的内存。确切的区别在于案例1(查看以下评论,因为您的定义不正确)将创建每个函数的1000个实例。案例2(再次查看下面的评论)将只创建每个函数的1个实例。
然而案例2没有在原型中定义。你基本上是在那里重新定义原型。正确的用法是:
function Foo2 (name) {
this.name = name;
};
Foo2.prototype.getFirstName = function () { return "name1"; };
Foo2.prototype.getLastName = function () { return "name2"; };
您的案例1在您尝试实现的目标方面也未正确定义,因为getFirstName
和getLastName
未通过this
(实例)定义。
答案 1 :(得分:0)
第二种情况是内存效率更高,性能更高。在构造函数中定义方法时,将为每个对象分配相同的函数或方法,以便对象占用更多内存。因此,在prototype-object中定义方法,然后所有对象只共享相同的方法一次。
所以我的建议是你在构造函数中定义属性(数字,字符串......)以及在第二种情况下在原型对象中定义方法或函数。
当你以这种方式定义一个对象的时候:
var Foo1 = function (name) {
this.name = name;
getFirstName = function() { return "name1"; };
getLastName = function() { return "name2"; };
};
方法getFirstName和getLastName是window的属性,因为你实际写了这个:
var Foo1 = function (name) {
this.name = name;
window.getFirstName = function() { return "name1"; };
window.getLastName = function() { return "name2"; };
};