zer*_*ero 9 javascript oop object
我发现这篇文章http://www.webmasterworld.com/javascript/3066162.htm 关于如何在javascript实例化一个对象文字,如果它有定义的方法然后每次实例化它的方法也被复制.因此,如果你有一堆对象文字的实例,那么复制的方法将开始在内存中加起来.
他/她如何声明使用原型来使您的方法更有效,因为不会为构造函数对象的每个实例复制方法.
这是真的?因为我的印象是,即使在实例化对象之后,原型也允许您添加属性/方法,而不是在首次创建对象时添加属性/方法.
tak*_*eek 15
当您创建这样的对象时:
function Car(c) {
this.color = c;
this.drive = function() {};
}
Run Code Online (Sandbox Code Playgroud)
您实际上是为您创建的每辆汽车创建驱动器功能的副本.在Javascript中,每个对象都有一个原型指针,该原型中的属性/方法从树向下传播到子对象.
当你这样做时:
function Car(c) {this.color=c};
Car.prototype.drive = function {};
Run Code Online (Sandbox Code Playgroud)
然后创建一些你最终得到的汽车对象:
{drive: function(){}}
/ | \
car1 (red) car2 (blue) car3 (green)
该drive函数在所有Car对象之间共享.令人遗憾的是,在Javascript中执行此操作的语法非常尴尬.
xan*_*ded 10
这是真的,这就是为什么有一个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"
Run Code Online (Sandbox Code Playgroud)
使用Foo.prototype可防止与重新定义hellobar每个实例相关的不必要的额外位new Foo().