正文
{
console
.
log
(
'Hello, my name is: '
+
this
.
name
);
};
var
a1
=
new
A
(
'a1'
);
var
a2
=
new
A
(
'a2'
);
a1
.
sayHello
();
a2
.
sayHello
();
var
b1
=
new
B
(
'b1'
);
var
b2
=
new
B
(
'b2'
);
b1
.
sayHello
();
b2
.
sayHello
();
我们首先写了两个构造函数,第一个是
A
,这个构造函数里面包含了一个方法
sayHello
;第二个是构造函数
B
,
我们把那个方法
sayHello
写在了构造函数
B
的
prototype
属性上面.
需要指出的是,通过这两个构造函数
new
出来的对象具有一样的属性和方法,但是它们的区别我们可以通过下面的一个图来说明:
我们通过使用构造函数
A
创建了两个对象,分别是
a1
,
a2
;通过构造函数
B
创建了两个对象
b1
,
b2
;我们可以发现
b1
,
b2
这两个对象的那个
sayHello
方法
都是指向了它们的构造函数的
prototype
属性的
sayHello
方法.而
a1
,
a2
都是在自己内部定义了这个方法.
定义在构造函数内部的方法,会在它的每一个实例上都克隆这个方法;定义在构造函数的
prototype
属性上的方法会让它的所有示例都共享这个方法,但是不会在每个实例的内部重新定义这个方法.
如果我们的应用需要创建很多新的对象,并且这些对象还有许多的方法,为了节省内存,我们建议把这些方法都定义在构造函数的
prototype
属性上