1 function human(name,tall){
2 this.name=name;
3 this.tall=tall;
4 this.toSleep=function(){
5 alert('no sleep');
6 }
7 }
8
9 human.prototype.toSleep=function(){
10 alert('sleep');
11 }
12
13 var meimei=new human("meimei",160);
14 var xiaoqiang=new human("xiaoqiang",170);
15
16 //会先去找meimei这个对象中是否含有toSleep方法
17 //如果没有就会去原型中即human构造器找,这样两个就会相等meiemi.toSleep()==xiaoqiang.toSleep()为true
18 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);
**********************************