您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 03_JS中的面向对象编程
03_JS中的面向对象编程Page2本章导学什么是对象Page3内容提要object类型再谈Javascript数据类型Javascript中的原生对象自定义对象“纯”函数和构造函数this关键词遍历对象对象的constructor、prototype属性Javascript中的面向对象编程Page4ObjectObject(对象)Object是一种数据类型对象中的一种,Object是构造器创建语法:varobj=newObject();默认属性值:默认属性方法:一般来说,所有对象都有Object对象所具有的属性Page5再谈Javascript数据类型(01)Javascript的两大类型系统基本类型系统对象类型系统Javascript类型图(见书上60页)Page6再谈Javascript数据类型(02)Page7再谈Javascript数据类型(03)值类型与引用类型:值类型:又称基本类型。保存在栈内存中的简单数据段。值类型数据在内存中具有固定的内存大小。例如:number型在内存中占有八个字节,boolean只占有一个字节。引用类型:保存在堆内存中的对象。意思是变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。由于这种类型大小不固定,不能保存在栈内存当中,但是它们的内存地址是固定的,我们可以存储在栈内存当中。当查询引用类型的变量时,就首先从栈中读取内存地址,然后顺杆爬地找到保存在堆中的值。这种方式一般称为按引用访问,因为我们操作的不是实际值,而是被那个值所引用的对象。Page8Javascript中的原生对象(01)Boolean对象Boolean对象是”基本类型系统”中值类型boolean的包装类型。NewBoolean(value);//value为存放的值Boolean(value);Number对象Number对象的属性和方法。//见书上62页String对象String对象的属性和方法。//见书上64页Page9Javascript中的原生对象(02)Math对象(无构造函数,不能new)Array对象通常的数组,用于单个的变量存储多个值。Date对象RegExp对象表示正则表达式,对字符串执行模式匹配。Global对象(无构造函数,不能new)Page10Javascript中的原生对象(03)Number(数值):Number对象是number值类型的包装类型,Number是构造器构造函数Number()可以不与运算符new一起使用,而直接作为转化函数来使用。以这种方式调用Number()时,它会把自己的参数转化成一个数字,然后返回转换后的原始数值(或NaN)。属性值和属性方法见下一页的图或参考W3CSchool手册Page11Javascript中的原生对象(04)String(字符串):String对象是string值类型的包装类型,String是构造器String对象的length属性声明了该字符串中的字符数。String类定义了大量操作字符串的方法。由于String对象的属性方法太多,具体请参考W3CSchool手册Page12Javascript中的原生对象(05)Date(日期):Date对象是JavaScript的一种内部数据类型。Date是构造器Date对象没有可以直接读写的属性,所有对日期和时间值的访问都是通过其方法执行的。由于Date对象的属性方法太多,具体请参考W3CSchool手册Page13Javascript中的原生对象(06)Math(数学):Math对象不是构造器,因此不能被实例化Math中定义大量数学函数,包括三角函数、幂函数等,由于其属性方法太多,具体请参考W3CSchool手册Page14Javascript中的原生对象(07)RegExp(正则):RegExp对象表示正则表达式,它是对字符串执行模式匹配的强大工具。正则表达式在表单验证、文档处理等方面应用广泛,具体可参考大二时的教材《网络编程基础》中的正则表达式那章。Page15Javascript中的原生对象(08)Array(数组)数组在Javascript中是通过Array对象实现的。数组是一组数据的集合。元素:数组中可以存储多个值,每个值我们称之为数组的元素。在JS中,数组元素的值可以为任意类型数据。下标:每个数组的元素有一个相关的索引,可视为资料内容在数组中的识别名称,通常也被称为数组下标或键名。在JS中,数组的下标可以为整数或字符串。数组的下标如果不指定,默认是从0开始。Page16Javascript中的原生对象(09)Global(全局对象)全局对象是预定义的对象,没有构造函数,在引擎初始时就被实例化,所以无法实例化一个新的全局对象。全局对象没有名称,Global只是我们概念上认为的名称。全局对象中定义了很多实用的全局函数及属性,在开发中经常会用到。具体请参考W3CSchool手册。Page17自定义对象目前在Javascript中,已经存在一些标准的类,例如Date、Array、RegExp、String、Math、Number等等,这为我们编程提供了许多方便。但对于复杂的客户端程序而言,这些还远远不够。自定义对象四种方式:对象直接量方式。构造函数方式。原型方式。构造及原型混合方式。Page18“纯”函数和构造函数纯函数和构造函数相同点都为对象。纯函数和构造函数不同点凡是要使用new关键词进行实例化的函数,称之为构造函数。纯函数直接用this调用。代码上写法,纯函数命名的开头用小写字母,构造函数的开头我们采用大写字母。this关键词的运用Page19遍历对象Javascript中的对象都可以看做属性、方法的集合。只要是集合,我们就可以变量。所以,我们同样的可以使用for.......in语句进行遍历。见03_07_01.htmlPage20对象的constructor、prototype属性判断对象是否能实例化的重要属性:constructor引用对象的构造函数。prototype指向对象的原型对象。03_08_01.html查看constructor、prototype属性,发现了什么现象?prototypePage21Javascript中的面向对象编程(01)在Javascript中一切有值的数据都可以看做对象JS是基于对象的一种语言JS是使用原型继承来实现对象系统的。代码的角度看,原型就是prototype属性只有构造函数才能访问prototype属性,对它为显式。实例对象或对象是不能直接访问prototype属性,对它为隐式。prototype属性也是对象。构造函数对象的原型对象的方法和属性,通过改构造函数对象实例化的实例对象,也将拥有它的方法和属性。Page22Javascript中的面向对象编程(02)new关键字的作用创建Object(对象)查找构造函数的prototype上的所有方法、属性,复制一份给创建的Object(注意,如果prototype上有属性是function或者数组或者Object,那么只复制指针)将构造函数内部的this指向创建的Object创建的Object的__proto__指向构造函数的prototype执行构造函数Page23基于原型的继承(01)原型继承:在Javascript中,继承是通过原型链的原理实现的在例子03_09_04_01.html中继承的根本就在于这一步Programmer.prototype=newPerson()。也就是说把Person加到Programmer的原型链上如果new关键字、原型链的原理都没理解,那就这样记住Javascript中继承的实现:将A对象的prototype指向一个B对象,则对象A可以继承B的属性和方法。prototype继承是通过把子对象的原型对象(prototype)设置成父对象的一个实例来进行继承的。Page24基于原型的继承(02)继承要注意的几个问题:只有本身是原型对象的对象能继承其他对象。子对象在继承时原来的原型对象将被替换成了父对象:子对象原来的原型设置的属性或方法都会消失子类本身的constructor属性就没有了。在子类的实例取它的constructor属性时,取得的是从父类中继承的constructor属性,从而constructor的值是父类而不是子类。Page25原型链原型链:每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己的__proto__,于是就这样一直找下去,也就是我们平时所说的原型链的概念。Page26封装公有属性:即定义的成员属性和方法能够被任何实例访问,对任何的实例都是公开的。所有this后的属性、prototype后的属性和方法,都是公有属性。私有属性:即在内部实现中可以共享的成员,但是并不对外公开。私有属性主要是通过变量的作用域性质来实现的,在Javascript中,一个函数内部定义的变量称为局部变量,该变量不是被函数外的程序访问,却可以被函数内部定义的嵌套函数访问。在实现私有成员的过程中,正是利用了这一性质。静态属性:函数名中直接定义的属性。如Person.myName。在这定义相当于类名的属性。静态的,访问的时候必须用Person.myName来访问,不能用newPerson().myName访问,也访问不到。Page27多态重写:也称之为覆盖。指子对象中重新实现与父对象同名的方法。这样可以实现子对象对同一方法调用时呈现多种状态。重载:指子对象中定义同名但参数类型不同的方法,在调用时,根据传入的参数不同而自动调用对应的方法处理,JS中的方法将覆盖之前的同名方法。Page28小结Javascript中的原生对象自定义对象的那4种方法“纯”函数和构造函数的区别this关键词的作用对象的constructor、prototype属性Javascript中的面向对象编程
本文标题:03_JS中的面向对象编程
链接地址:https://www.777doc.com/doc-3050045 .html