您的位置:首页 > Web前端 > JavaScript

javascript 面向对象特性之继承

2016-06-23 14:45 676 查看
/**
* Created by zengxianwen on 2016/6/15.
*/
console.log('start
javascript oo'
);

//继承
/**
* 类式继承
@constructor
*/
function SuperClass(){
this.superClass true;
this.books =
[<
20a2d
/span>'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 p = 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: