预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

javascript原型与原型链 学习javascript原型与原型链原理,能够更深入的理解javascript数据类型的使用;在往后的程序开发过程中能够有效的利用javascript编程语言的特点,编写出高效率的程序。 一般情况下编写javascript程序,创建对象的抒写方式是 <scriptlanguage="javascript"type="text/javascript"> varuser={ name:"小红", age:"12" }; </script> 学习原型之前需要普及几个js数据类型知识; javascript中所谓的对象,也就是常规意义上的变量;对象分为函数对象和普通对象两种。 首先来介绍一下函数对象,以下三种均为函数对象,其实就是函数;重点要注意的是第三种函数的定义方式,如果函数体内部使用了this关键字说明这个函数需要使用new关键字声明对象使用的,有些像java和面向对象中的类的概念。 functionmax(a1,a2){ if(a1>a2){ returna1; }; returna2; }; varmax=function(a1,a2){ if(a1>a2){ returna1; }; returna2; }; functionUser(name,age){ this.name=name; this.age=age; }; 使用new关键字来创建User函数对象的实例化对象: 如果不涉及js面向对象编程的概念,正常意义上的this关键字所代表的其实是window对象,自定义的变量,函数都隶属于window对象。 通过new关键字能够新创建内存空间,所自定义的变量和函数都隶属于当前操作对象,不隶属于window对象。 例如: varuser1=newUser("小红","23"); varuser2=newUser("小明","24"); user1和user2两个变量同时都使用User函数对象初始化,其中的数据(小红,小明)都各自保存在自己内存空间的name变量中。 user1.name;//小红 user2.name;//小明 所谓普通对象是通过new关键字使用函数对象创建出来的变量都是普通对象,如: varuser1=newUser("小红","23"); //user1就是普通对象 那么还有一种对象是如下的定义方式,我们会有疑问这种对象并没有使用new关键字? vartest={ name:"小明", sex:"女" }; 其实这种对象也是通过new关键字创建的,属于系统隐含创建,其使用的函数对象是系统默认的: functionObject(){} 系统应该是这样隐含定义的: varuser=newObject(); 为什么能够推理出自定义对象{}是由Object函数对象初始化的呢?这就要引入我们的主题:原型与原型链 原型 javascript中所有的函数对象都具有一个原型实例,所谓原型就是这个函数对象是由哪个函数对象的实例产生的。 //我们可以使用全等符号===来测试函数对象中原型的存在: 函数对象获取原型对象: functionUser(name,age){ this.name=name; this.age=age; }; User.prototype//prototype即返回原型对象。 系统默认的prototype是这样的: functionUser(){ }; varuser1=newUser(); User.prototype=user1; User.prototype.constructor=User; 系统默认的prototype,就是函数对象自己,使用new关键字产生的普通对象。 注意:prototype.constructor构造器所指向的一般是函数对象自己,用于当程序运行时使用new关键字创建对象时,根据constructor调用;如果prototype被使用new赋值过其他函数对象,则constructor会被清空,需要重新为constructor赋值。 普通对象也可以获取原型对象,用以说明这个这个普通对象是由哪个函数对象创建的: varuser1=newUser(); user1.__proto__ 说明:__proto__用于指向创建user1的函数对象(User)的原型对象(prototype)。 测试: functionUser(name,age){ this.name=name; this.age=age; }; varuser1=newUser("小红","23"); window.alert(user1.__proto__===(User.prototype));//弹出true 注