1、原型继承:利用原型中的成员可以被和其相关的对象共享这一特性,可以实现继承
2、原型继承的写法
(1)给原型对象中添加成员(通过对象的动态特性,其实不是严格意义上的继承)
function
Person
(name
,
age){
this
.
name
= name
;
this
.
age
= age
;
}
Person
.
prototype
.
sayHello
=
function
(){
console
.
log
(
"sayHello()"
)
;
}
;
var
p =
new
Person
(
"张学友"
,
18
)
;
p.
sayHello
()
;
//通过原型去添加sayHello()方法
//这里的p对象就继承了原型对象
就是说原来这个对象里面没有某个方法/属性,通过上面这种方式去添加成员。对象继承原型,然后原型里面新增方法,那么这个对象里面就有这么一个方法
(2)直接替换原型对象:其实原理还是对象继承原型(虽然可以实现原型继承,但是很可能原有原型中的成员会丢失)
function
Person
(name
,
age){
this
.
name
= name
;
this
.
age
= age
;
}
var
parent = {
//让p对象继承parent对象
sayHello
:
function
(){
console
.
log
(
"你好"
)
;
}
}
;
Person
.
prototype
= parent
;
//把parent变成构造函数的原型就可以让p对象去继承parent对象了
var
p =
new
Person
(
"张学友"
,
18
)
;
p.
sayHello
()
;
(3)利用混入的方式给原型对象添加成员(还是对象继承原型)
function
Person
(name
,
age){
this
.
name
= name
;
this
.
age
= age
;
}
var
parent = {
sayHello
:
function
(){
console
.
log
(
"你好呀"
)
;
}
}
;
for
(
var
k in parent){
Person
.
prototype
[k] = parent[k]
;
//因为是要给原型添加这个sayHello()方法
}
var
p =
new
Person
(
"张学友"
,
18
)
;
p.
sayHello
()
;