亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

分析javascript原型及原型鏈

2024-05-06 16:43:13
字體:
來源:轉載
供稿:網友

我們創建的每個函數都有一個 prototype (原型)屬性,這個屬性是一個指針,指向一個原型對象,而這個原型對象中擁有的屬性和方法可以被所以實例共享。

function Person(){}Person.prototype.name = "Nicholas";Person.prototype.age = 29;Person.prototype.sayName = function(){alert(this.name);};var person1 = new Person();person1.sayName(); //"Nicholas"var person2 = new Person();person2.sayName(); //"Nicholas"alert(person1.sayName == person2.sayName); //true

一、理解原型對象

無論什么時候,只要創建了一個新函數,就會根據一組特定的規則為該函數創建一個 prototype屬性,這個屬性指向函數的原型對象。

在默認情況下,所有原型對象都會自動獲得一個 constructor(構造函數)屬性,這個屬性包含一個指向 prototype 屬性所在函數的指針。

當調用構造函數創建一個新實例后,該實例的內部將包含一個指針(內部屬性),指向構造函數的原型對象。ECMA-262 第 5 版中管這個指針叫 [[Prototype]] 。

雖然在腳本中沒有標準的方式訪問 [[Prototype]] ,但 Firefox、Safari 和 Chrome 在每個對象上都支持一個屬性__proto__ ;而在其他實現中,這個屬性對腳本則是完全不可見的。

不過,要明確的真正重要的一點就是,這個連接存在于實例與構造函數的原型對象之間,而不是存在于實例與構造函數之間。

以前面使用 Person 構造函數和 Person.prototype 創建實例的代碼為例,圖 6-1 展示了各個對象之間的關系。

javascript,原型,原型鏈

在此, Person.prototype 指向了原型對象,而 Person.prototype.constructor 又指回了 Person 。

person1 和 person2 都包含一個內部屬性,該屬性僅僅指向了 Person.prototype ;換句話說,它們與構造函數沒有直接的關系。

可以調用 person1.sayName() 。這是通過查找對象屬性的過程來實現的。(會先在實例上搜索,如果搜索不到就會繼續搜索原型。)

 

用isPrototypeOf()方法判斷實例與原型對象之間的關系alert(Person.prototype.isPrototypeOf(person1)); //truealert(Person.prototype.isPrototypeOf(person2)); //true用Object.getPrototypeOf() 方法返回實例的原型對象alert(Object.getPrototypeOf(person1) == Person.prototype); //true使用 hasOwnProperty() 方法可以檢測一個屬性是存在于實例中,還是存在于原型中。alert(person1.hasOwnProperty("name")); //false  來著原型person1.name = "Greg";alert(person1.name); //"Greg"——來自實例alert(person1.hasOwnProperty("name")); //true

二、更簡單的原型語法

前面例子中每添加一個屬性和方法就要敲一遍 Person.prototype 。為減少不必要的輸入,也為了從視覺上更好地封裝原型的功能,更常見的做法是用一個包含所有屬性和方法的對象字面量來重寫整個原型對象。

function Person(){}Person.prototype = {  name : "Nicholas",  age : 29,  job: "Software Engineer",  sayName : function () {    alert(this.name);  }};

在上面的代碼中,我們將 Person.prototype 設置為等于一個以對象字面量形式創建的新對象。最終結果相同,但有一個例外: constructor 屬性不再指向 Person 了。

前面曾經介紹過,每創建一個函數,就會同時創建它的 prototype 對象,這個對象也會自動獲得 constructor 屬性。

var friend = new Person();alert(friend instanceof Object); //truealert(friend instanceof Person); //truealert(friend.constructor == Person); //falsealert(friend.constructor == Object); //true

在此,用 instanceof 操作符測試 Object 和 Person 仍然返回 true ,但 constructor 屬性則等于 Object 而不等于 Person 了。

如果 constructor 的值真的很重要,可以像下面這樣特意將它設置回適當的值。

function Person(){}Person.prototype = {  constructor : Person,  name : "Nicholas",  age : 29,  job: "Software Engineer",  sayName : function () {    alert(this.name);  }};  

三、原生對象的原型

所有原生引用類型( Object 、 Array 、 String ,等等)都在其構造函數的原型上定義了方法。

例如,在 Array.prototype 中可以找到 sort() 方法,而在 String.prototype 中可以找到substring() 方法。盡管可以這樣做,但不推薦修改原生對象的原型。

四、原型對象的問題

原型模式的最大問題是由其共享的本性所導致的。 修改其中的一個,另一個也會受影響。

function Person(){}Person.prototype = {constructor: Person,name : "Nicholas",age : 29,job : "Software Engineer",friends : ["Shelby", "Court"],sayName : function () {alert(this.name);}};var person1 = new Person();var person2 = new Person();person1.friends.push("Van");alert(person1.friends); //"Shelby,Court,Van"alert(person2.friends); //"Shelby,Court,Van"alert(person1.friends === person2.friends); //true

五、原型鏈

其基本思想是利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。然后層層遞進,就構成了實例與原型的鏈條,這就是所謂原型鏈的基本概念。

function SuperType(){  this.property = true;}SuperType.prototype.getSuperValue = function(){  return this.property;};function SubType(){  this.subproperty = false;}//繼承了 SuperTypeSubType.prototype = new SuperType();SubType.prototype.getSubValue = function (){  return this.subproperty;};var instance = new SubType();alert(instance.getSuperValue()); //true

 一張圖說明:

javascript,原型,原型鏈

 

property 則位于 SubType.prototype 中。這是因為 property 是一個實例屬性,而 getSuperValue() 則是一個原型方法。既然 SubType.prototype 現在是 SuperType的實例,那么 property 當然就位于該實例中了。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久视频| 欧美成人第一页| 日韩最新在线视频| 姬川优奈aav一区二区| 欧美精品18videos性欧| 成人啪啪免费看| 国模极品一区二区三区| 欧美激情综合色综合啪啪五月| 日韩在线资源网| 欧美视频一区二区三区…| 亚洲一区二区三区成人在线视频精品| 成人欧美一区二区三区黑人孕妇| 亚洲电影在线观看| 日韩中文第一页| 亚洲欧美制服综合另类| 国产丝袜一区二区三区| 欧美一级电影免费在线观看| 国产成人精品午夜| 8x拔播拔播x8国产精品| 亚洲永久在线观看| 国产精品一区二区三区成人| 亚洲第一视频在线观看| 97视频在线观看亚洲| 精品亚洲夜色av98在线观看| 国产精品久久激情| 国产成人精品免高潮在线观看| 国产精品久久网| 成人h猎奇视频网站| 国产区精品视频| 国产做受69高潮| 久久久久久久久亚洲| 色播久久人人爽人人爽人人片视av| 91成人国产在线观看| 日韩欧美极品在线观看| 国产精品亚洲片夜色在线| 亚洲久久久久久久久久| 国产精品丝袜高跟| 5278欧美一区二区三区| 色与欲影视天天看综合网| 亚洲国产一区自拍| 亚洲欧美国产日韩中文字幕| 在线激情影院一区| 中文欧美日本在线资源| 欧美日韩激情网| 欧美在线观看www| 在线精品播放av| 亚洲成色999久久网站| 国产在线视频2019最新视频| 永久免费看mv网站入口亚洲| 欧美激情视频在线免费观看 欧美视频免费一| 琪琪第一精品导航| 成人动漫网站在线观看| 欧美精品在线观看91| 九九精品在线播放| 日韩在线小视频| 国产aⅴ夜夜欢一区二区三区| 成人福利网站在线观看11| 欧美日韩免费区域视频在线观看| 久久久久久久久久久成人| 成人黄色免费片| 国产女精品视频网站免费| 国产视频精品久久久| 欧美色道久久88综合亚洲精品| 亚洲最新视频在线| 91精品国产91| 欧美精品videos另类日本| 久久久久中文字幕| 97成人精品区在线播放| 国产成人精品在线播放| 国产精品免费观看在线| 欧美日韩中文字幕在线| 欧美激情国产高清| 国产999精品久久久| 亚洲精品视频在线播放| 精品久久久视频| 欧日韩不卡在线视频| 日韩精品在线免费| 日韩亚洲精品电影| 色无极亚洲影院| 日韩在线视频二区| 亚洲欧美成人在线| 69国产精品成人在线播放| 国产精品亚洲欧美导航| 粉嫩老牛aⅴ一区二区三区| 欧美精品videos性欧美| 欧美另类xxx| 精品国产精品自拍| 欧美小视频在线观看| 国产999在线观看| 日韩精品在线观| www.xxxx精品| 日韩专区在线观看| 亚洲性猛交xxxxwww| 色噜噜亚洲精品中文字幕| 不卡av电影院| 一本色道久久88综合亚洲精品ⅰ| 亚洲字幕一区二区| 国产91精品视频在线观看| 97视频在线观看免费高清完整版在线观看| 欧美成人精品在线播放| 在线观看欧美日韩国产| 亚洲欧美中文字幕在线一区| 国产精品久久久久9999| 欧洲亚洲女同hd| 中文字幕在线日韩| 欧美激情va永久在线播放| 夜夜嗨av一区二区三区免费区| 91视频九色网站| 91精品国产综合久久香蕉最新版| 国产色视频一区| 日韩视频免费在线| 超碰97人人做人人爱少妇| 色综合导航网站| 国产精品自产拍在线观看中文| 疯狂做受xxxx欧美肥白少妇| 亚洲香蕉成人av网站在线观看| 欧美亚洲国产成人精品| 中文字幕视频一区二区在线有码| 亚洲男女自偷自拍图片另类| 亚洲激情视频网站| 国产精品高清在线观看| 日韩动漫免费观看电视剧高清| 国产精品香蕉av| 国产精品mp4| 久久97久久97精品免视看| 超碰97人人做人人爱少妇| 久久久精品日本| 欧美激情网站在线观看| 国产精品91在线观看| 国产精品久久久久久av福利| 91精品在线观看视频| 一本色道久久综合狠狠躁篇怎么玩| 91高清免费视频| 亚洲免费影视第一页| 久久91精品国产91久久跳| 欧美精品情趣视频| 日本亚洲欧美三级| 国产一区二区在线免费| 日韩精品视频中文在线观看| 伊人伊成久久人综合网站| 中文字幕日韩av电影| 成人免费看吃奶视频网站| 国产小视频国产精品| 欧美国产乱视频| 国产亚洲免费的视频看| 一区二区三区四区视频| 亚洲国内高清视频| 日韩av影院在线观看| 国产精品成人一区| 国产亚洲美女精品久久久| 亚洲精品久久久久中文字幕二区| 精品福利樱桃av导航| 欧美高清在线播放| 91极品女神在线| 精品国产91乱高清在线观看| 亚洲专区中文字幕| 在线观看精品国产视频| 国产不卡精品视男人的天堂| 在线视频日韩精品| 欧美激情视频网| 国产精品黄页免费高清在线观看| 亚洲精品自产拍| 精品国产一区二区三区四区在线观看| 成人黄色免费在线观看|