JavaScript 彻底理解JavaScript原型

JavaScript 彻底理解JavaScript原型

ID:42623747

大小:591.94 KB

页数:21页

时间:2019-09-19

JavaScript 彻底理解JavaScript原型_第1页
JavaScript 彻底理解JavaScript原型_第2页
JavaScript 彻底理解JavaScript原型_第3页
JavaScript 彻底理解JavaScript原型_第4页
JavaScript 彻底理解JavaScript原型_第5页
资源描述:

《JavaScript 彻底理解JavaScript原型》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、彻底理解JavaScript原型原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有"[[prototype]]"属性,函数对象有"prototype"属性,原型对象有"constructor"属性。为了弄清原型,以及原型相关的这些属性关系,就有了这篇文章。相信通过这篇文章一定能够清楚的认识到原型,现在就开始原型之旅吧。认识原型开始原型的介绍之前,首先来认识一下什么是原型?在JavaScript中,原型也是一个对象,通过原型可以实现对象的属性继承,JavaScript

2、的对象中都包含了一个"[[Prototype]]"内部属性,这个属性所对应的就是该对象的原型。"[[Prototype]]"作为对象的内部属性,是不能被直接访问的。所以为了方便查看一个对象的原型,Firefox和Chrome中提供了"__proto__"这个非标准(不是所有浏览器都支持)的访问器(ECMA引入了标准对象原型访问器"Object.getPrototype(object)")。实例分析下面通过一个例子来看看原型相关概念:functionPerson(name,age){this.na

3、me=name;this.age=age;this.getInfo=function(){console.log(this.name+"is"+this.age+"yearsold");};}varwill=newPerson("Will",28);在上面的代码中,通过了Person这个构造函数创建了一个will对象。下面就通过will这个对象一步步展开了解原型。 Step1:查看对象will的原型通过下面代码,可以查看对象will的原型:console.log(will.__proto__);

4、console.log(will.constructor);结果分析:·"Person{}"对象就是对象will的原型,通过Chrome展开可以看到,"Person{}"作为一个原型对象,也有"__proto__"属性(对应原型的原型)。·在这段代码中,还用到了"constructor"属性。在JavaScript的原型对象中,还包含一个"constructor"属性,这个属性对应创建所有指向该原型的实例的构造函数。o通过"constructor"这个属性,我们可以来判断一个对象是不是数组类型o

5、functionisArray(myArray){oreturnmyArray.constructor.toString().indexOf("Array")>-1;}o在这里,will对象本身并没有"constructor"这个属性,但是通过原型链查找,找到了will原型(will.__proto__)的"constructor"属性,并得到了Person函数。 Step2:查看对象will的原型(will.__proto__)的原型既然will的原型"Person{}"也是一个对象,那么我们

6、就同样可以来查看"will的原型(will.__proto__)的原型"。运行下面的代码:console.log(will.__proto__===Person.prototype);console.log(Person.prototype.__proto__);console.log(Person.prototype.constructor);console.log(Person.prototype.constructor===Person);结果分析:·首先看"will.__proto__=

7、==Person.prototype",在JavaScript中,每个函数都有一个prototype属性,当一个函数被用作构造函数来创建实例时,该函数的prototype属性值将被作为原型赋值给所有对象实例(也就是设置实例的__proto__属性),也就是说,所有实例的原型引用的是函数的prototype属性。了解了构造函数的prototype属性之后,一定就明白为什么第一句结果为true了。oprototype属性是函数对象特有的,如果不是函数对象,将不会有这样一个属性。·当通过"Person

8、.prototype.__proto__"语句获取will对象原型的原型时候,将得到"Object{}"对象,后面将会看到所有对象的原型都将追溯到"Object{}"对象。·对于原型对象"Person.prototype"的"constructor",根据前面的介绍,将对应Person函数本身。通过上面可以看到,"Person.prototype"对象和Person函数对象通过"constructor"和"prototype"属性实现了相互引用(后面会有图展示这个相互引用的关系)。 Step3:

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。