资源描述:
《js修改原型的属性使用介绍范文》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、原型(prototype)定义了特定类型的所有实例都可以访问的属性和方法,很多些情况下需要重新对原型中的属性赋值,下面为大家介绍下如何修改原型在javascript中原型(prototype)定义了特定类型的所有实例都可以访问的属性和方法,很多些情况下需要重新对原型中的属性赋值,如果方法错误会导致一些意想不到的情况(仅仅是对像我这样的新手奋斗),下面通过测试对这部分知识做一个简单的总结。基本类型定义如下:代码如下:functionPerson(){}Person,prototype二{construetor:Person,name:person,age:100,friends:[
2、a,b],getName:function(){returnthis,name;}};定义两个Person的实例,修改实例中的name属性(该属性是在prototype中定义的),测试代码如下代码如下:varpl二newPerson();varp2=newPerson();document.write(pl.name+br/);//persondocument.write(p2.name+br/);//personpl.name=pl;document.write(pl.name+br/);//pldocument.write(p2.name+br/);//persondocum
3、ent.write(pl.hasOwnProperty(name)+br/);//true属于对象document.write(p2.hasOwnProperty(name)+br/);//false属于原型document.write(Object.keys(pl)+br/);//namedocument.write(Object.keys(p2)+br/);//空document.write(Object.getOwnPropertyNames(Person,prototype)+br/);//construetor,name,age,friends,getNamedocum
4、ent.write(Person,prototype.name+br/);//person经过测试可以发现pl.name二pl并不是修改了name的值而是在实例pl中新增加了一个name属性覆盖了prototype中的name属性,从后续的判断中就可以看出这时候pl的name属性已经是一个实例属性而不是原型属性,后面的Object,keys(pl)也可以看出pl这个实例中多了一个name属性而p2中没有。在js中所有的传递都是值传递,这个值可以是个指向引用类型的指针,所以等号并不意味着修改这个引用对象,而是切换了原来的引用关系,下面再通过代码说明这个问题代码如下:varobj=n
5、ewObject();obj・name二obj;functionchangeObj(o){o.name二changed;o二newObject();o.name=newObj;}changeObj(obj);document•write(obj.name);//changed在changedObj方法中o=newObject()并没有修改参数o的值,而是切断了原来的引用关系,所以结果并不是newObj而是changed接下来测试一下修改第一个例子中prototype屮的friends属性,这个属性是一个引用类型代码如下:pl.friends・push(c);document・wr
6、ite(pl.fTiends+br/);//a,b,cdocument・write(p2・friends+br/);//a,b,cpl・friends二[x,y,z];document.write(p1.friends+br/);//x,y,zdocument・write(p2・fTiends+br/);//a,b,cdocument.write(pl.hasOwnProperty(friends)+br/);//true属于对象document.write(p2.hasOwnProperty(friends)+br/);//false属于原型document.write(Obj
7、ect.keys(pl)+br/);//name,frienddocument.write(Object.keys(p2)+br/);//空document.write(Object.getOwnPropertyNames(Person,prototype)+br/);//construetor,name,age,friends,getNamedocument.write(Person,prototype.friends+br/);//a,b,c这次测试结果与第一次的测试基本相同