对象文字符号与原型速度和内存
object literal notation vs prototype speed and memory
我看到了这篇文章http://www.webmasterworld.com/javascript/3066162.htm关于如何在javascript中实例化一个对象文字如果它中定义了方法,那么每次实例化一个时,它的方法也会被复制。因此,如果您有一堆对象文字的实例,那么复制的方法就会开始在内存中累积。
他/她说,使用原型来制作方法更有效,因为方法不是为构造函数对象的每个实例复制的。
这是真的吗?因为我的印象是,原型允许您添加属性/方法,即使在对象被实例化之后,而不是在第一次创建对象时在对象内。
当您创建这样的对象时:
function Car(c) {
this.color = c;
this.drive = function() {};
}
实际上,你正在为你创建的每辆车创建一个驱动功能的副本。在Javascript中,每个对象都有一个原型指针,来自该原型的属性/方法沿着树传播到子对象。
当你这样做:
function Car(c) {this.color=c};
Car.prototype.drive = function {};
然后创建一些汽车对象,你最终得到的是:
{drive:function(){}}/|''car1(红色)car2(蓝色)car3(绿色)
drive
功能在所有Car对象之间共享。遗憾的是,在Javascript中这样做的语法太尴尬了。
这是真的,这就是为什么存在prototype
。
// define Function foo
function Foo()
{
this.x = 1;
this.bar = 'bar';
}
// define method on Foo's prototype
Foo.prototype.helloBar = function()
{
alert(this.bar);
}
var foobar = new Foo();
foobar.helloBar(); // alerts "bar"
使用CCD_ 3防止了与为每个实例CCD_ 5重新定义CCD_ 4相关联的不必要的额外比特。
在构造函数的原型上定义方法与其他语言中的类定义类似。例如,Java类中定义的方法由该类的所有实例共享。在Javascript中,构造函数原型上定义的方法由该构造函数创建的所有实例共享。
上面示例中的主要区别在于变量声明。原型上定义的变量将在实例之间共享,因为类的每个实例都有自己的类定义中变量的副本。
最简单的理解方法是通过一些实验。http://jsfiddle.net/3vn4A/
在Firefox中,对象可以通过__proto__
指针直接访问其原型。Object.getPrototypeOf(obj)
是对象以编程方式引用其原型的标准方式。
- Wacom stu-430签名捕获速度太慢
- 如何在速度模板中获取LiferayPortlet实例id
- 我想放慢html中进程栏的速度
- 重复应用 d3 转换导致的内存泄漏
- 如何显示在给定极限内存在的所有素数
- IE7中的blockUI插件内存泄漏25kb
- Javascript闭包-如何防止内存泄漏
- Knockout绑定大量数据的速度较慢
- 基于订阅的nosql内存数据库
- 显示:阻止/无html元素,css.not从内存中释放
- Wordpress:未捕获引用错误:未定义速度
- jQuery Draggable:内存泄漏
- 即使光标位于屏幕边缘,也可以跟踪鼠标速度
- Css优化谷歌页面速度洞察
- fullcalendar在删除导致浏览器挂起的多个事件时速度较慢
- Javascript图像数组预加载速度和从内存中删除
- 对象文字符号与原型速度和内存
- immacro + JS速度变慢,占用内存太多
- javascript中对象与数组的内存使用和速度
- 函数中的参数是否会改变Js中的内存使用或速度使用?