版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、优就业WEB教程-JavaScript之原型深入详解理解原型原型是一个对象,其他对象可以通过它实现属性继承。任何一个对象都可以成为继承,所有对象在默认的情况下都有一个原型,因为原型本身也是对象,所以每个原型自身又有一个原型。任何一个对象都有一个prototype的属性,记为:_proto_。每当我们定义一个对象,其_proto_属性就指向了其prototype。示例如下:var foo = x: 10,y: 20;即使我们不指定prototype,该属性也会预留。如果我们有明确指向的话,那么链表就连起来了。需要注意的是,prototype自己也有指向,就是最高级的totyp
2、e。示例如下:var a = x: 10,calculate: function (z) return this.x + this.y + z;var b = y: 20,_proto_: a;var c = y: 30,_proto_: a;/ call the inherited methodb.calculate(30); / 60使用原型理解了原型的原理之后,如何使用原型呢?或者说原型有什么作用呢?一般的初学者,在刚刚学习了基本的javascript语法后,都是通过面向函数来编程的。如下代码:var decimalDigits = 2,tax = 5;function add(x, y
3、) return x + y;function subtract(x, y) return x - y;/alert(add(1, 3);通过执行各个函数来得到最后的结果。但是利用原型,我们可以优化一些我们的代码,使用构造函数:首先,函数本体中只存放变量:var Calculator = function (decimalDigits, tax) this.decimalDigits = decimalDigits;this.tax = tax;其具体的方法通过prototype属性来设置:Ctotype = add: function (x, y) return x
4、 + y;,subtract: function (x, y) return x - y;/alert(new Calculator().add(1, 3);这样就可以通过实例化对象后进行相应的函数操作。这也是一般的js框架采用的方法。原型还有一个作用就是用来实现继承。首先,定义父对象:var BaseCalculator = function() this.decimalDigits = 2;BaseCtotype = add: function(x, y) return x + y;,subtract: function(x, y) return x - y;然后
5、定义子对象,将子对象的原型指向父元素的实例化:var Calculator = function () /为每个实例都声明一个税收数字this.tax = 5;Ctotype = new BaseCalculator();我们可以看到Calculator的原型是指向到BaseCalculator的一个实例上,目的是让Calculator集成它的add(x,y)和subtract(x,y)这2个function,还有一点要说的是,由于它的原型是BaseCalculator的一个实例,所以不管你创建多少个Calculator对象实例,他们的原型指向的都是同一个实例。上面的
6、代码,运行以后,我们可以看到因为Calculator的原型是指向BaseCalculator的实例上的,所以可以访问他的decimalDigits属性值,那如果我不想让Calculator访问BaseCalculator的构造函数里声明的属性值,那怎么办呢?只需要将Calculator指向BaseCalculator的原型而不是实例就行了。代码如下:var Calculator = function () this.tax= 5;Ctotype = BaseCtotype;在使用第三方库的时候,有时候他们定义的原型方法不能满足我们的需要,我们
7、就可以自己添加一些方法,代码如下:/覆盖前面Calculator的add() functionCtotype.add = function (x, y) return x + y + this.tax;var calc = new Calculator();alert(calc.add(1, 1);原型链对象的原型指向对象的父,而父的原型又指向父的父,这种原型层层的关系,叫做原型链。在查找一个对象的属性时,javascript会向上遍历原型链,直到找到给定名称的属性为止,当查找到达原型链的顶部,也即是Ototype,仍然没有找到指定的属性,就会返回u
8、ndefined。示例如下:function foo() this.add = function (x, y) return x + y;totype.add = function (x, y) return x + y + 10;Ototype.subtract = function (x, y) return x - y;var f = new foo();alert(f.add(1, 2); /结果是3,而不是13alert(f.subtract(1, 2); /结果是-1我们可以发现,subtrace是按照向上找的原则,而add则出了意外。原因就是,属性在查找的时候是先查找自身的属性,如果没有再查找原型。说到Ototype,就不得不提它的一个方法,hasOwnProperty。它能判断一个对象是否包含自定义属性而不是原型链上的属性,它是javascript中唯一一个处理属性但是不查找原型链的函数。使用代码如下:/ 修改OtotypeOtotype.bar = 1;var foo = goo: undefined;foo.bar; / 1'bar' in foo; / truefoo.hasOwnProperty('bar'); / false
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财会法规与职业道德期末复习题
- 部门应急演练效果复盘优化制度
- 2026年中国别墅型可视对讲门铃市场调查研究报告
- (新)“麻醉药品、精神药品”管理和使用培训考核试题(含答案)
- 2026大学生安全教育测试试题及答案
- 特殊人群服务处置方案
- 2026年执业药师资格认证模拟试题及答案
- 包装设备安装专项施工方案
- 小儿内科学(副高)2025模拟考试库及答案解析
- 港口安全生产管理人员培训题库及答案
- 广东春风银星新材料科技环境影响报告表
- 《宠物临床职业技能评价规范-宠物医师》
- 137案例黑色三分钟生死一瞬间事故案例文字版
- GB/T 44148.3-2024承压设备用钢锻件、轧制或锻制钢棒第3部分:低温韧性镍钢
- 汽车起重机技术规格书
- (高清版)TDT 1055-2019 第三次全国国土调查技术规程
- 生产线员工培训课件
- 建设项目临时占用林地恢复技术规范
- 学前美术基础与创作(高职学前教育专业)全套教学课件
- 烽火网管系统介绍
- 宝钢股份设备管理培训
评论
0/150
提交评论