資源描述:
《js修改原型的屬性使用介紹范文》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、原型(prototype)定義了特定類型的所有實(shí)例都可以訪問的屬性和方法,很多些情況下需要重新對原型中的屬性賦值,下面為大家介紹下如何修改原型在javascript中原型(prototype)定義了特定類型的所有實(shí)例都可以訪問的屬性和方法,很多些情況下需要重新對原型中的屬性賦值,如果方法錯(cuò)誤會(huì)導(dǎo)致一些意想不到的情況(僅僅是對像我這樣的新手奮斗),下面通過測試對這部分知識做一個(gè)簡單的總結(jié)。基本類型定義如下:代碼如下:functionPerson(){}Person,prototype二{construetor:Person,name:person,age:100,friends:[
2、a,b],getName:function(){returnthis,name;}};定義兩個(gè)Person的實(shí)例,修改實(shí)例中的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經(jīng)過測試可以發(fā)現(xiàn)pl.name二pl并不是修改了name的值而是在實(shí)例pl中新增加了一個(gè)name屬性覆蓋了prototype中的name屬性,從后續(xù)的判斷中就可以看出這時(shí)候pl的name屬性已經(jīng)是一個(gè)實(shí)例屬性而不是原型屬性,后面的Object,keys(pl)也可以看出pl這個(gè)實(shí)例中多了一個(gè)name屬性而p2中沒有。在js中所有的傳遞都是值傳遞,這個(gè)值可以是個(gè)指向引用類型的指針,所以等號并不意味著修改這個(gè)引用對象,而是切換了原來的引用關(guān)系,下面再通過代碼說明這個(gè)問題代碼如下: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()并沒有修改參數(shù)o的值,而是切斷了原來的引用關(guān)系,所以結(jié)果并不是newObj而是changed接下來測試一下修改第一個(gè)例子中prototype屮的friends屬性,這個(gè)屬性是一個(gè)引用類型代碼如下: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這次測試結(jié)果與第一次的測試基本相同