快速业务通道

JS教程:学习笔记之JS类

作者 佚名技术 来源 网页制作 浏览 发布时间 2012-03-06
o

这不是bug,而且各个浏览器里都一样。原因分析如下:

 

Person.prototype = {

mark:''Person.Proto''

}

一段首先创建一个对象字面量,并且赋值给Person.prototype,我们称这个对象字面量为Proto。

 

var nahao = new Person(''Top css'',male,1989,''www.javava.org'');

 

在创建nahao对象并且按照构造函数初始化对象的同时,会悄悄给nahao对象设置一个内部属性,我们暂且将其命名为xxx,并且将其赋值为Person.prototype的值,也就是上面提到的对象字面量Proto,JavaScript的动态继承也就是由这个xxx实现的。(这个JavaScript的内部实现机制不是我拍脑门想出来的,是Netscape的工作人员的一篇文章里提到的,下面也会用程序来证明这个流程。)然后,

 

 

Person.prototype = {

mark:''Person.NewProto''

}

 

这里我们将创建另外一个对象字面量NewProto,并且赋值给Person.prototype。到这里就很明显了,尽管我们修改了 Person.prototype,但是并没有影响到nahao对象。当我们访问nahao.mark的时候,它首先在自己内部找,找不到就会去找xxx,自然就找到了Proto,而非NewProto。那么xxx这个实现动态继承的关键究竟是什么呢?在FireFox中它是__proto__,有以下代码为证。至于在IE中xxx是什么我还没找到。

 

 

Person.prototype = {

mark:''Person.Proto''

}

var nahao = new Person(''Topcss'',''male'',1989,''www.nahao8.com'');

nahao.prototype = {

mark:''Person.NewProto''

}

alert(nahao.mark);

alert(nahao.__proto__.mark);//两次alert的结果都是一样的,都是Proto。

 

alert(nahao.__proto__===Person.prototype);//结构为true。

 

以上代码经过测试适用于FireFox和chrome。NetScape应该也可以,IE不行。

个人观点:Person.prototype = {}的方式最好只在定义构造函数的时候使用一次,而且要紧跟着构造函数写,以后修改prototype的时候都使用Person.prototype.protertyA = ‘valueA’的形式。

 

 

10、    最后的构造函数我们在上面看到了定义对象,以及设这和修改其属性的各种方法,我们可以在构造函数中定义属性,可以在对象外部定义(静态)属性,也可以在对象的prototype中定义属性。下面是我使用的大致格式:

 

 

function Person(nameArg,genderArg,yearOfBirthArg,siteArg,privacyArg){

//公有属性

this.name = nameArg;

this.gender =

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号