国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript原型繼承和原型鏈原理詳解

2024-05-06 15:44:04
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了JavaScript原型繼承和原型鏈原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

在討論原型繼承之前,先回顧一下關于創建自定義類型的方式,這里推薦將構造函數和原型模式組合使用,通過構造函數來定義實例自己的屬性,再通過原型來定義公共的方法和屬性。

這樣一來,每個實例都有自己的實例屬性副本,又能共享同一個方法,這樣的好處就是可以極大的節省內存空間。同時還可以向構造函數傳遞參數,十分的方便。

這里還要再講一下兩種特色的構造函數模式:

1.寄生構造函數

從形式上來看,這種模式和工廠模式并無區別:

function Person(name, age, job) {  var o = new Object();  o.name = name;  o.age = age;  o.job = job;  o.sayName = function() {    alert(this.name);  };  return o;}var friend = new Person("Nicholas", 29, "Software Engineer");friend.sayName(); //"Nicholas"

都是在內部創建一個Object對象實例,再賦予屬性和方法,最后返回,這種構造模式的好處是,對于原生的引用類型創建的實例,例如Array,想為實例創建新的方法或者屬性時,因為不建議直接修改原生的Array引用類型的構造函數,所以可以利用寄生構造函數:

function SpecialArray() {  //創建數組  var values = new Array();  //添加值  values.push.apply(values, arguments);  //添加方法  values.toPipedString = function() {    return this.join("|");  };  //返回數組  return values;}var colors = new SpecialArray("red", "blue", "green");alert(colors.toPipedString()); //"red|blue|green"

通過在內部創建一個Array實例,并添加新的方法,最后將這個實例返回,既沒有修改原生的Array構造函數,又成功添加了自定義的方法和屬性。

缺點:使用寄生構造函數有一個缺點,那就是返回的實例與構造函數或構造函數原型屬性之間沒有關系,與在構造函數外創建實例沒有區別,也無法通過instanceof來確定對象類型,因此有其他更好選擇的時候,不推薦使用該方法。

2.穩妥構造函數

穩妥構造函數與寄生構造函數類似,但是并不使用new和this(某些環境下禁止使用),前面的函數可以改寫成這樣:

function Person(name, age, job) {  //創建要返回的對象  var o = new Object();  //可以在這里定義私有變量和函數  //添加方法  o.sayName = function() {    alert(name);  };  //返回對象  return o;}

說完這些,現在來談談原型繼承和原型鏈,所謂繼承,基本思想是利用原型讓一個引用類型繼承另一個引用類型的方法和屬性。每個構造函數都有一個原型對象,原型對象都包含一個指向構造函數的指針,而實例都包含一個指向原型對象的內部指針。所有引用類型默認都繼承了Object,而這個繼承也是通過原型鏈實現的。大家要記住,所有函數的默認原型都是Object 的實例,因此默認原型都會包含一個內部指針,指向Object.prototype。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 鲁甸县| 聂荣县| 舟曲县| 平顺县| 迁安市| 称多县| 永清县| 武定县| 明光市| 晋宁县| 石河子市| 瑞昌市| 五常市| 太仆寺旗| 普兰店市| 墨玉县| 云阳县| 三原县| 柞水县| 广水市| 龙海市| 尼玛县| 马公市| 东山县| 德化县| 瑞昌市| 苏州市| 武宣县| 康马县| 田林县| 宜城市| 古丈县| 谢通门县| 永顺县| 台东县| 岑溪市| 库尔勒市| 芜湖市| 突泉县| 天峻县| 盈江县|