日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript之原型

發布時間:2025/4/16 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript之原型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、初識原型

?? ???JS的引用類型會內置一個特殊的屬性prototype。默認的prototype是object類型的,是引用類型。既然默認的prototype是object類型的,那么prototype也會有一個原型,并且指向object的原型。

另外補充一點,function的原型可直接訪問,object的不行。

示例:

function SuperType(){};SuperType.age=18;SuperType.prototype.color=[“red”,”blue”];var t1=new SuperType ();t1.name=”hh”;var t2=new SuperType ();t2.qq=”aa”;

SuperType,t1,t2原型關系示意圖:

定義function SuperType時,編譯器會為其分配一個prototype屬性,并在內存中開辟一片區域用于存放SuperType的原型的數據,假設這片區域的地址為0xA。然后讓SuperType的prototype指向0xA。由SuperType創建出來的t1和t2的prototype也指向內存地址0xA。如果有SuperType.prototype.color.push(“green”),則t1和t2的color也會變為[“red”,”blue”,”green”]。因為SuperType,t1,t2的原型指向的是同一個地址的數據。這個過程可以這么比喻:把原型比喻為你的銀行卡賬戶,假設有一萬塊錢。當有人盜刷你的銀行卡,刷走了4000,然后你去銀行查看你賬戶余額,當然的會剩下6000。因為你跟盜刷你銀行卡的人所持的銀行卡指向的是同一個賬戶。

??? SuperType.prototype.color.push(“green”)后,示意圖如下:

二、 原型鏈

其實在上面的示意圖中,順著箭頭走,如Test—>Test的原型—>Object的原型,就是一條原型鏈了。當然t2—>Test的原型—>Object的原型也是一條原型鏈。下面對原形鏈進行補充,說明原型鏈在繼承體系中是怎么工作的。

示例:

function SuperType(){}; SuperType.age=18; SuperType.prototype.color=[“red”,”blue”];function SubType(){} SubType.property=”property”; SubType.prototype=new SuperType(); SubType.prototype.test=function(){alert(“test”);}function Child(){} Child.prototype=new SubType(); var t1=new SuperType (); t1.name=”hh”; var t2=new SuperType (); t2.qq=”aa”;var s=new SubType(); var c=new Child();

注意,SubType的原型被重新賦值了,SubType.prototype=new SuperType();

所以SubType的原型是SuperType的一個對象實例。

上述代碼的原型鏈示意圖如下:

三、重置原型

要重置原型,只要對原型重新賦值即可。例如:function Person(){} Person.prototype={ name:”Leo” } 需要注意的是,Person原型重寫后,Person的原型為{ name:”Leo”}。{ name:”Leo”}是一個匿名的Object實例,所以其constructor,為Object。也就是說重寫后Person的原型的constructor為Object。如果constructor重要,可以為其增加一個constructor屬性,如下:Person.prototype={????????? name:”Leo”,????????? constructor:Person}不過此時還會有一個問題,這樣設置的constructor將會使constructor變成是可枚舉的。所以,如果想讓它變為不可枚舉的,可用Object.defineProperty進行設置。

四、原型的動態性

示例:

function Person(){}var p=new Person();Person.prototype.sayHi=function(){alert(“Hi”);};p.sayHi();//這里沒問題,因為p在調用sayHi時,會先從自身找sayHi,找不到則會沿//著原形鏈去尋找,然后在Person的原型中找到了sayHi,于是就執行

?

原型動態性之-------重寫原型的問題

function Person(){}var p=new Person();Person.prototype={sayName: function(){alert(“Hi”);},constructor:Person}p.sayName();//此時將會報錯,p沒有sayName方法

?

這里為何p.sayName會報錯,Person的原型不是有sayName么?

且看下面的示意圖:

五、原型共享所引發的問題

原型的優點就是共享。例如:

function Person (){} Person.prototype.sayName=function(){}; var p1=new Person (); var p2=new Person ();

在原型中定義sayName函數,于是p1,p2對象有同一個sayName。而不會在內存中分配兩次內存來分別存放p1的sayName和p2的sayName。而缺點也是由共享所致。共享對于函數而言,是合適的,但是對于其他屬性而言,可能就會出問題。示例如下:

function Person(){} Person.prototype.color=[“red”,”green”]; var p1=new Person(); var p2=new Person(); alert(p1.color);//輸出red,green alert(p2.color); //輸出red,green p2.color.push(“blue”); alert(p1.color); //輸出red,green,blue。

注意,這里我并沒有更改p1的color;alert(p2.color); //輸出red,green,blue這里我們可以發現,p2的color進行更改之后,p1的color也跟著更改,這正是原型共享所引發的問題。

六、原型鏈與instanceof實現原理

假設a instanceof b,那么會從a的原形鏈中找出是否有跟b的原型相等的原型,如果找到則返回true,否則返回false。

示例如下:

function SuperType(){} function SubType(){} function Test(){} SubType.prototype=new SuperType(); var s=new SubType(); console.log(s instanceof SubType);//打出true,這是因為s的原型等于SubType的原型 SubType.prototype=new SuperType(); console.log(s instanceof SubType);//打出false

示意圖如下:(省略了百度上的文字說明而改為圖片說明)

以上是百度經驗里關于 javascript原型 的介紹。

延伸:

1.構造函數中的return

構造函數在沒有return的情況下新的實例默認返回undefined;如果構造函數中有return語句,

分兩種情況:

  • return 基本類型,返回函數
  • return 對象,返回對象。

2.原型模式的執行流程

  • 先查找構造函數實例里的屬性或方法,如果有,就立即返回。
  • 如果構造函數的實例沒有,就去它的原型對象里找,如果有,就立即返回

?拜讀了風雨后見彩虹的文章

轉載于:https://www.cnblogs.com/Merrys/p/8012661.html

總結

以上是生活随笔為你收集整理的javascript之原型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男人的天堂视频在线观看 | 粉嫩小箩莉奶水四溅在线观看 | h片免费观看| 激情小说欧美色图 | 强伦人妻一区二区三区视频18 | 欧美被狂躁喷白浆精品 | 国产videos| 成人免费毛片入口 | 青青国产精品视频 | 秋霞欧美一区二区三区视频免费 | 亚洲毛片在线 | 国产美女免费 | 精品视频大全 | 狠狠五月| 久久久久久久成人 | 高清福利视频 | 午夜影院免费看 | 爱爱视频网站免费 | 三级特黄视频 | 在线免费观看黄网 | 久久午夜精品人妻一区二区三区 | 黄色片久久久 | 国产又粗又大又长 | 久久视奸| 黄色一级免费看 | 特黄级| 国产精品夜夜夜爽阿娇 | 日本va在线 | wwwxxx日韩| 亚洲精品视频大全 | 91在线| 精品蜜桃av | 亚洲50p| 久久在线精品 | 久久久精品国产sm调教网站 | 日日射夜夜 | 自拍在线视频 | 亚洲精品 欧美 | 精品盗摄一区二区三区 | 女人18片毛片60分钟 | 国产欧美一区二区精品性色 | 永久免费观看av | 在线观看黄色片 | 精品欧美激情精品一区 | 欧美群妇大交群 | 国产极品视频 | 手机成人免费视频 | 国产ts三人妖大战直男 | 久久婷婷影视 | 国产男男gay体育生白袜 | 午夜精品久久久久久久99热浪潮 | 欧美日韩高清一区二区 国产亚洲免费看 | av三级在线播放 | 日韩精品视频网站 | 日本阿v视频在线观看 | 久久视频99| 无毒黄色网址 | 国产伦理一区二区 | 小明天天看 | 天天弄天天操 | 精品免费一区二区 | 日韩精品视频中文字幕 | 99re这里只有精品在线 | 日韩少妇中文字幕 | 中文字幕资源网 | av福利在线 | 美女张开腿让男人桶爽 | 欧洲性生活片 | 青青久在线 | 激情小说视频在线 | 美女又黄又免费 | 精品久久综合 | 国产日韩欧美高清 | 人妖性做爰aaaa | www四虎com| 东北毛片 | 久久国产日韩 | 国产一区日韩一区 | 天天躁日日躁aaaxxⅹ | 五月婷婷丁香久久 | 亚洲国产精品午夜久久久 | 蜜臀久久精品久久久久久酒店 | 国产精品久久久久久久久岛 | 在线亚洲精品 | 一本色道久久综合亚洲二区三区 | 亚洲国产一二三 | 亚洲色图美腿丝袜 | 中文字幕电影一区二区 | 啪啪小视频网站 | 国产主播在线看 | av午夜精品 | 欧美理论在线观看 | 就要操就要射 | 成人区人妻精品一区 | 日韩精品久久一区 | www精品一区二区三区 | 日韩欧| 欧美激情另类 | 国产大片b站 |