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); **********************************