- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
javascript面向对象详解分析
javascript 面向对象详解 天河智能 1.Javascript 面向对象编程(1):封装 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。 那么,如果我们要把属性(property)和方法(method),封装成一个对象,甚至要从原型对象生成一个实例对象,我们应该怎么做呢? 1.1、 生成对象的原始模式 假定我们把猫看成一个对象,它有名字和颜色两个属性。 1.2、 原始模式的改进 我们可以写一个函数,解决代码重复的问题。 1.3、 构造函数模式 为了解决从原型对象生成实例的问题,Javascript提供了一个构造函数(Constructor)模式。 所谓构造函数,其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。 1.4、构造函数模式的问题 构造函数方法很好用,但是存在一个浪费内存的问题。 请看,我们现在为Cat对象添加一个不变的属性type(种类),再添加一个方法eat(吃老鼠)。那么,原型对象Cat就变成了下面这样: 1.4、构造函数模式的问题 1.5、 Prototype模式 Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。 这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。 1.6、 Prototype模式的验证方法 为了配合prototype属性,Javascript定义了一些辅助方法,帮助我们使用它。 1.6、 Prototype模式的验证方法 6.3 in运算符 in运算符可以用来判断,某个实例是否含有某个属性,不管是不是本地属性。 Javascript面向对象编程(2):构造函数的继承 比如,现在有一个动物对象的构造函数。 2.1、 构造函数绑定 第一种方法也是最简单的方法,使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行: 2.2、 prototype模式 第二种方法更常见,使用prototype属性。 如果猫的prototype对象,指向一个Animal的实例,那么所有猫的实例,就能继承Animal了。 2.2、 prototype模式 更重要的是,每一个实例也有一个constructor属性,默认调用prototype对象的constructor属性。 2.3、 直接继承prototype 第三种方法是对第二种方法的改进。由于Animal对象中,不变的属性都可以直接写入Animal.prototype。所以,我们也可以让Cat()跳过 Animal(),直接继承Animal.prototype。 现在,我们先将Animal对象改写: 2.3、 直接继承prototype 与前一种方法相比,这样做的优点是效率比较高(不用执行和建立Animal的实例了),比较省内存。缺点是 Cat.prototype和Animal.prototype现在指向了同一个对象,那么任何对Cat.prototype的修改,都会反映到Animal.prototype。 所以,上面这一段代码其实是有问题的。 请看第二行:Cat.prototype.constructor = Cat; 这一句实际上把Animal.prototype对象的constructor属性也改掉了! alert(Animal.prototype.constructor); // Cat 2.4、 利用空对象作为中介 由于直接继承prototype存在上述的缺点,所以就有第四种方法,利用一个空对象作为中介。 2.4、 利用空对象作为中介 我们将上面的方法,封装成一个函数,便于使用。 2.5、 拷贝继承 上面是采用prototype对象,实现继承。我们也可以换一种思路,纯粹采用拷贝方法实现继承。简单说,如果把父对象的所有属性和方法,拷贝进子对象,不也能够实现继承吗?这样我们就有了第五种方法。 首先,还是把Animal的所有不变属性,都放到它的prototype对象上。 Javascript面向对象编程(3):非构造函数的继承 一、什么是非构造函数的继承? 比如,现在有一个对象,叫做中国人。 3.2、object()方法 json格式的发明人Douglas Crockford,提出了一个object()函数,可以做到这一点。 3.3、浅拷贝 除了使用prototype链以外,还有另一种思路:把父对象的属性,全部拷贝给子对象,也能实现继承。 下面这个函数,就是在做拷贝: 3.3、浅拷贝
您可能关注的文档
最近下载
- 货物质量保证措施方案.docx VIP
- 九年级全一册英语单词默写表(人教版).docx VIP
- 香港朗文小学英语Longman-book4B-Chapter1-课件-Join-ourclub.ppt VIP
- GBT25198__压力容器封头.pdf VIP
- SYT7301-2016陆上石油天然气开采含油污泥资源化综合利用及污染控制技术要求.doc
- 机房断电应急预案.docx
- 电力电缆课程设计220KV 交联聚乙烯绝缘电力电缆结构设计.doc
- 《国有企业管理人员处分条例》解读.pptx VIP
- 科普版四年级上 英语 课文 带翻译.pdf VIP
- 急救相关知识考试题库300题(含答案).pdf VIP
文档评论(0)