javascript面向对象 教程.ppt
《javascript面向对象 教程.ppt》由会员分享,可在线阅读,更多相关《javascript面向对象 教程.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ACCP V4.0第第 二二 章章 JavaScript面向对象面向对象ACCP V4.02q了解JavaScript面向对象q撑握JavaScript中的类型q理解JavaScript函数对象q撑握声明JavaScript类的方法q撑握实现JavaScript类的继承q撑握JavaScript类的多态q撑握JSVM的配置目标ACCP V4.03qJavaScript面向对象是指采用面向对象的思想编写JavaScript脚本。q采用面向对象的JavaScript开发比采用传统的面向过程的JavaScript应用更加健壮。q面向对象的继承,多态等特征可以极大的提高JavaScript应用的开发效
2、率。q面向对象的JavaScript框架及应用日益增多:qDojo JavaScript的套开源类库qPrototype 一套用于构建JavaScript面向对象开发的基础类库qGoogle Maps,Gmail等AJAX应用JavaScript面向对象介绍ACCP V4.04qJavaScript是一门弱类型的语言,即变量类型运行时确定。qJavaScript中常见的类型:q基本类型:数字(Number),字符串(String),布尔值(Boolean)q小数据类型:null,undefinedq复合类型,由基本类型构成:对象(Object),数组(Array)q特殊类型:函数(Functi
3、on)q基础工具类:全局对象Globals,日期Date,数学Math,正则表达式RegExp及错误对象Error,这些由JavaScript内置建立的类。JavaScript的类型ACCP V4.05qnull是javascript的一个关键字,用于指定一个变量不对应任何的值或对象。qundefined不是javascript的关键字,它是一个全局变量即Globals对象的一个属性,下列三种情况javascript将返回undefined:q使用一个未定义的变量q使用已经定义但未赋值的变量q使用对象不存在的属性或未赋值的属性qundefined与null并不一样,但一般的情况下一样,例如:n
4、ull undefined类型ACCP V4.06qundefined与null并不一样,但一般的情况下一样,例如:qalert(undefined=null)返回trueqvar foo=“”alert(foo.bar=null);返回truealert(foo.bar=undefined);返回trueq但:alert(undefined=null)返回false,=是javascript中全等操作符。null undefined类型ACCP V4.07q函数在javascript中是一种特殊的对象类型,函数可以作为值赋给变量,获作为参数传递给另一个函数,或作为其它函数的返回,例如:函数类
5、型/函数作业变量的值var foo=function()var bar=function(fun);bar(foo);/将函数作为参数值传递var myfun=function()/函数作业其它函数的返回值 return function();/forEach实现遍历数组的方法,/fn为传递的回调方法Array.forEach=function(fn)for(var i=0;ithis.length;i+)fn(thisi);var nums=1,2,3;nums.forEach(function(num)alert(num););ACCP V4.08q函数对象在调用时具有的属性:qargum
6、ents调用函数时传递的参数,它类似一个数组由脚本解释器负责建立qarguments.caller获取调用当前函数的父函数的引用。函数类型qarguments保存调用函数时的参数引用qlength参数的个数qcallee arguments所对应的函数var factorial=function(n)if(n=0)return 1;return n*argments.callee(n 1);q示例展示了使用callee计算n阶乘的递归方法调用ACCP V4.09q示例使用函数的caller属性获取调用的堆栈信息:函数类型window.onload=function()var bar=funct
7、ion()var fun=arguments.callee;var callstack=;while(fun&fun.caller!=window)callstack=callstack+=n调用函数:+fun+nn;fun=fun.caller;alert(callstack);var foo=function()bar();foo();ACCP V4.010q函数是JavaScript中的特殊对象,它具有多重身份可以作业变量的值,参数或返回值,也可以用于声明JavaScript的类。q类名称即为函数的名称,函数即为类的构造函数。函数类型function Foo()this.propa=ba
8、r;/赋予当前对象的属性值 this.propb=bar2;var fooa=new Foo();/建立Foo的实例var foob=new Foo();var testb=“bar string”;/建立字符串对象alert(fooa instanceof Foo);/返回truealert(testb instanceof Foo);/返回falseACCP V4.011q函数的apply及call方法提供将函数绑定到其它对象执行,函数中this将指向绑定的对象。qapply与call的区别在于调用时参数的形式不同qapply的格式apply(thisObj,argArray);thisO
9、bj待绑定的对象argArray调用函数的参数数组qcall的格式call(thisObj,arg1,arg2,.argN);thisObj待绑定的对象arg1,arg2 argN调用函数传递参数函数类型ACCP V4.012apply及call示例function Test1()this.prop=test1;this.method=function(msg)alert(this.prop+:+msg);function Test2()this.prop=test2;this.method=function(msg)alert(this.prop+:+msg);/直接调用对象的方法var o
10、bj1=new Test1();var obj2=new Test2();obj1.method(msg1);obj2.method(msg2);obj1.method.call(obj2,msg1);/使用call绑定到obj2上执行obj2.method.call(obj1,msg2);obj1.method.apply(obj2,msg1);/使用apply绑定到obj2上执行obj2.method.apply(obj1,msg2);ACCP V4.013qthis,with都是javascript中的关键字qthis主要用于两种地方q在构造函数中,指代新创建的对象q在对象的方法被调用时
11、,指代调用该方法的对象函数若是一个普通的函数this将指向windowqwith用于缩短javascript代码Javascript中的this与withwith(Math)x=cos(3*PI)+sin(LN10);y=tan(14*E);ACCP V4.014qJavascript提供for.in.语句用于遍历对象的属性和方法,typeof方法可用于获取对象的类型。qJavaScript对象属性可通过.或获取。中是属性或方法名的字符串q示例中遍历对象的属性和方法,如果是属性获取其值,如果是方法则执行对象内省functionTest()this.prop=test;this.fa=funct
12、ion()alert(fa);var t=new Test();for(var p in t)if(typeof(tp)=Function)tp();/执行方法 else alert(tp);/输出属性值 ACCP V4.015qJavaScript支持面向对象的编程,支持面向对象的封装,继承,多态等特征。qJavaScript中支持两种方式声明类:q使用函数声明类q使用对象的prototype的方式声明类JavaScript中声明类ACCP V4.016q示例使用函数声明Test类。JavaScript中声明类function Test()this.prop=test;var bar=“ba
13、r”;this.fa=function()alert(fa);Test.staticProp=“static prop”;Test.staticMethod=function();q示例中this.prop为类的公开的属性,而bar则是一个私有属性,私有属性只能在当前函数中使用。qstaticProp和staticMethod为该类的静态属性及静态方法,静态属性及方法只能通过类引用。ACCP V4.017qJavascript中的类都具有prototype的属性,指定为该属性的值,该类的实例对象将会自动继承。JavaScript中声明类function Test()Test.prototype
14、=prop:test,fa:function()alert(fa);/大括号声明了一个匿名的对象var test=new Test();alert(test.prop);/得到test字符串q使用prototype的方式声明类更加简洁,在大量的框架中有使用。ACCP V4.018qJavascript中并没有直接提供类的继承,但可以通过复制代码的方式实现。q复制代码可以解决继承的问题,但父类修改时子类又需要重新编码。q解决重复代码的问题可考虑使用for.in 语句复制作属性及方法类的继承function TestB()for(var name in Test)/遍历所有Test类的属性及方法拷
15、贝到TestB类中 TestB.prototypename=Test.prototypename;TestB.prototype.fa=function()q示例TestB继承了Test的属性及方法,并且重载了Test的fa的方法。ACCP V4.019q使用for.in.可解决父类与子类代码一致的问题,但每次继承都需要编写for.in语句。q示例中通过为Object对象定义一extend方法来简化JavaScript中继承操作,Object是JavaScript中的类类的继承Object.extend=function(destination,source)for(prop in sourc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- javascript面向对象 教程 javascript 面向 对象
限制150内