资源描述:
《JS面向对象经典案例》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JS面向对象经典案例//一、通用创建函数functionNew(aClass,aParams){//定义临时的中转函数壳functionnew_(){//调用原型中定义的构造函数,中转构造逻辑及构造参数,用Create方法,来替代原有的构造函数aClass.Create.apply(this,aParams);};new_.prototype=aClass;returnnewnew_();};//PersonvarPerson={//模拟Object.create()方法,初始化Create:function(name,age){this.n
2、ame=name;this.age=age;returnthis;},sayHello:function(){alert("mynameis"+this.name+",myageis"+this.age);}}window.onload=function(){varobj=New(Person,["luolibing",26]);obj.sayHello();//IE9及以上GOOGLEFIREFOX支持,IE8及IE8以下不支持,跟上面的方法类似//getPrototypeOf获取Object的原型,IE版本要求高IE9以上varo=Obj
3、ect.create(Person).Create("liuxiaoling",27);o.sayHello();}functionperson(name){this.name=name;};//二、原型链级,子类需要一个原型指向父类,传递起来比较麻烦person.prototype.sayHello=function(){alert("Hello,I'm"+this.name);};//employeefunctionemployee(name,money){person.call(name);this.money=money;};//子类
4、原型指向父类Personemployee.prototype=newperson();//子类原型添加showMoney方法employee.prototype.showMoney=function(){alert(this.name+this.money);};varem=newemployee("bob",11);em.showMoney();em.sayHello();varpp=newperson("jack");pp.sayHello();//alert(pp.sayHello==em.sayHello);String.protot
5、ype.toString()=function(){};varaaa="bb";aaa.toString();String.prototype.isDate=function(){varreg=/^[0-9]*$/;returnreg.test(this);};alert("11231".isDate());alert("2005-11-11".isDate());functionPerson(name){this.name;};Person.prototype.company="MS";//原型的方法Person.prototype.Say
6、Hello=function(){alert("Hello,I'm"+this.name+"of"+this.company);};varBillGates=newPerson("BillGates");BillGates.SayHello();//由于继承了原型的东西,规规矩矩输出:Hello,I'mBillGatesvarSteveJobs=newPerson("SteveJobs");SteveJobs.company="Apple";//设置自己的company属性,掩盖了原型的company属性//实现了自己的SayHello方法,
7、掩盖了原型的SayHello方法SteveJobs.SayHello=function(){alert("Hi,"+this.name+"like"+this.company+",hahaha");};SteveJobs.SayHello();//都是自己覆盖的属性和方法,输出:Hi,SteveJobslikeApple,hahahaBillGates.三、闭包:什么是闭包要了解什么是闭包,涉及到JS的其他几个特性:作用域链,垃圾回收机制,嵌套函数作用域链:就是函数在定义的时候创建的,用于寻找使用到的变量的值的一个索引,他内部的规则是,把函数
8、自身的变量放在最前面,把自身的父级函数中的变量放到其次,再高一级的放在更后面,以此类推,最后到全局对象为止。当函数中遇到一个变量时,JS解析器会去作用域链中查找,从