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