javascript 面向对象特性之继承

/**
* Created by zengxianwen on 2016/6/15.
*/
console . log ( 'start javascript oo' );






//继承
/**
* 类式继承
@constructor
*/
function  SuperClass(){
this . superClass  true ;
this . books  = [ 'javascript' , 'html' , 'css' ];
}

SuperClass. prototype . getSuperValue  function  () {
return this . superClass ;
};
function  SubClass () {
this . subClass  false ;
}
SubClass . prototype  new  SuperClass();
SubClass . prototype . getSubClassValue  function  () {
return this . subClass ;
};
var  instance  new  SubClass ();
console . log ( 'instance.superClass--'  instance . getSuperValue ());
console . log ( 'instance.subClass--'  instance . getSubClassValue ());
console . log ( SubClass . prototype  instanceof  SuperClass);
console . log ( instance  instanceof  SubClass );
console . log ( instance  instanceof  SuperClass);

console . log ( 'instance.books--' + instance . books );
instance . books . push ( 'java' )
var  instance_0  new  SubClass ();
console . log ( instance_0 . books );
/**
* 构造函数继承
@param  id
@constructor
*/
function  SuperClass_1(id) {
this . books  = [ 'javascript' , 'html' , 'css' ];
this . id  = id;
}
SuperClass_1. prototype . showBooks  function  () {
console . log ( this . books );
}

function  SubClass_1 (id) {
SuperClass_1. call ( this ,id);
}
var  instance_1  new  SubClass_1 ( 20 );
console . log ( 'insance_1.book--'  instance_1 . books );
instance_1 . books . push ( 'Java' );
console . log ( 'insance_1.book--'  instance_1 . books );
var  instance_1_1  new  SubClass_1 ( 10 );
console . log ( 'insance_1_1.book--'  instance_1_1 . books );

/**
* 组合式继承,构造函数与类式继承融合
@param  name
@constructor
*/
function  SuperClass_2(name) {
this . name  = name;
this . books  = [ 'javascript' , 'html' , 'css' ];
}
SuperClass_2. prototype . getName  function  () {
return this . name ;
};

function  SubClass_2 (name,time) {
this . time  = time;
SuperClass_2. call ( this ,name);
}
SubClass_2 . prototype  new  SuperClass_2();

SubClass_2 . prototype . getTime  function  () {
return this . time ;
};
console . log ( SubClass_2  instanceof  SuperClass_2);
var  instance_2  new  SubClass_2 ( 'javascript' , 2014 );
console . log ( instance_2 . books );
instance_2 . books . push ( 'java' );
console . log ( instance_2 . books );
console . log ( instance_2 . getTime ());
console . log ( instance_2 . getName ());
var  instance_2_1  new  SubClass_2 ( 'java' , 2012 );
console . log ( instance_2_1 . books );
console . log ( instance_2_1 . getTime ());
console . log ( instance_2_1 . getName ());
console . log ( 'end javascript oo' );


/**
* 原型式继承
@param  o
@returns  {F}
*/
function  inheritObject (o) {
function  F () {};
F . prototype  = o;
return new  F ();
}


/**
* 寄生组合式继承
@param  subClass
@param  superClass
*/
function  inheritPrototype (subClass,superClass) {
var  inheritObject (superClass. prototype );
p . constructor  = subClass;
subClass. prototype  p ;
}

function  SuperClass_3 (name) {
this . name  = name;
this . colors  = [ 'red' , 'blue' , 'green' ];
}

SuperClass_3 . prototype . getName  function  () {
return this . name ;
}

function  SubClass_3 (name,time) {
SuperClass_3 . call ( this ,name);
this . time  = time;
}
inheritPrototype ( SubClass_3 , SuperClass_3 );

SubClass_3 . prototype . getTime  function  () {
return this . time ;
}

var  instance_3  new  SubClass_3 ( 'js book' , 2022 );
var  instance_3_2  new  SubClass_3 ( 'Java' , 2015 );
instance_3 . colors . push ( 'black' );
console . log ( instance_3 . colors );
console . log ( instance_3_2 . colors );
console . log ( instance_3 . getName ());
console . log ( instance_3 . getTime ());
console . log ( SubClass_3 . prototype  instanceof  SuperClass_3 )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值