js-原型以及继承小案例

时间:2023-03-09 14:37:18
js-原型以及继承小案例
 function human(name,tall){
this.name=name;
this.tall=tall;
this.toSleep=function(){
alert('no sleep');
}
} human.prototype.toSleep=function(){
alert('sleep');
} var meimei=new human("meimei",160);
var xiaoqiang=new human("xiaoqiang",170); //会先去找meimei这个对象中是否含有toSleep方法
//如果没有就会去原型中即human构造器找,这样两个就会相等meiemi.toSleep()==xiaoqiang.toSleep()为true
meiemi.toSleep();
情况1:
function animal(legs){
this.leg=legs;
} function human(name,tall){
this.name=name;
this.tall=tall;
}
human.prototype=new animal(2); var meimei=new human("meimei",160);
var xiaoqiang=new human("xiaoqiang",170); meimei.leg 情况2:
function animal(legs){
this.leg=legs;
} function human(name,tall){
this.name=name;
this.tall=tall;
} human.prototype.head=1;
human.prototype={leg:2}; //整个对象被替换
human.prototype.leg=2; var meimei=new human("meimei",160);
var xiaoqiang=new human("xiaoqiang",170); meimei.leg 情况3:call()以及apply()
function sleep(){
alert(this.name+"to Sleep");
}
sleep(); ----window对象调用 **********************************
var meiemi={
name:'meiemi',
sleep:sleep
}
meimei.sleep(); ----meimei to Sleep **********************************
var meiemi={
name:'meiemi'
}
sleep.call(meimei); ----meimei to Sleep ***********************************
function sleep(time){
alert(time+":"+this.name+"to Sleep");
}
var meiemi={
name:'meiemi'
}
sleep.call(meimei,"21:00"); ----传参方式不一样
sleep.apply(meimei,["21:00"]) 情况4:
类式继承:
function Super(){
this.colors=["red","blue"]; //this为Super.call(this)传入的对象,该对象返回的结果就有一个colors
}
function Sub(){
//Super方法的执行环境改成了this
//this是new Super是创建的对象,最后被返回的对象
Super.call(this);
} ***********************************
原型式继承:
function obj(o){
function F(){}
F.prototype=o; //new了一个对象,但原型指向o
return new F();
}
var box={
name:'zhang',
arr:['borther','sister']
};
var b1=obj(box); //没有new了,在方法中内部创建了
alert(b1.name);
**********************************