- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
原型的含义是指:如果构造器有个原型对象 A,则由该构造器创建的实例(Object
Instance)都必然 于 A。““在 JavaScript 中,对象实例(Object Instance)
并没有原型,而构造器(Constructor)有原型,属性’构造器.prototype’指
向原型。对象只有 “构 造自某个原型”的问题,并不存在 “持有(或拥有)某
个原型”的问题。””如何理解这一句话?
代码 1:
01 function myFunc() {
02 var name = stephenchan;
03 var age = 23;
04 function code() {
05 alert(Hello World!);
06 };
07 }
08 var obj = new myFunc();
09 //输出 undefined,对象实例没有原型
10 alert(obj.prototype);
11 //输出 myFunc 的函数代码,obj 由myFunc 构造出来的
12 alert(obj.constructor);
13 //输出 true
14 alert(obj.constructor == myFunc);
15
16 //输出[object Object],说明myFunc 的原型是一个对象
17 alert(myFunc.prototype);
//输出 function Function() { [native code] },[native code]的意思是
18
JavaScript 引擎的内置函数
19 alert(myFunc.constructor);
20 //输出 true,函数原型的构造器默认是该函数
21 alert(myFunc.prototype.constructor == myFunc);
构造器与函数的概念是一致的,即代码 1 中,myFunc 就是一个构造器,因为通
过 new myFunc()就可以构造出一个对象实例了。因此,”alert(obj.prototype)”
输出 undefined 说明了对象实例是没有原型的,”alert(myFunc.prototype)”
输出[object Object]说明了构造器有原型,而 “obj.constructor myFunc”返
回 true 说明 obj 的构造器是myFunc。
原型其实也是一个对象实例。再强调一下原型的含义是:如果构造器有个原型对
象 A,则由该构造器创建的实例 (Object Instance)都必然 于 A,而且采用
的读遍历机制 的。读遍历 的意思是:仅当写某个实例的成员时,将成员
的信息 到实例映像中。即当构造 一个新的对象时,新对象里面的属性指向
的是原型中的属性, 对象实例的属性时,获取的是原型对象的属性值。而当
对象实例对一个属性进行写操作时,才会将 属性写到新对象实例的属性列表中。
图 1 JavaScript 使用读遍历机制实现的原型继承
代码 2:
01 Object.prototype.value = abc;
02 var obj1 = new Object();
03 var obj2 = new Object();
04 obj2.value = 10;
05 //输出 abc, 的是原型Object 中的value
06 alert(obj1.value);
07 //输出 10, 的是 obj2 成员列表中的 value
08 alert(obj2.value);
09 //删除 obj2 中的value,即在 obj2 的成员列表中将value 删除掉
10 delete obj2.value;
11 //输出 abc, 的是原型Object 中的value
12 alert(obj2.value);
图 1 是对代码 2 的描述,说明读遍历机制是如何在成员列表以至原型中管理对象
成员的。只有对属性进行第一次写操作的时候,才会在对象的成员列表中添加 该
属性的 。当 obj1 和 obj2 通过 new 来构造出来的时候,仍然是一个指向原型
的 ,在操作过程中也没有与原型相同大小的对象实例
文档评论(0)