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

首頁 > 網站 > WEB開發 > 正文

詳解js中extend函數

2024-04-27 15:03:27
字體:
來源:轉載
供稿:網友

extend詳解

為了簡化類的聲明,可以把派生子類的整個過程包裝在一個extend的函數,和其他語言中的extend關鍵字類似,基于一個給定的類結構創建一個新的類

function extend(subClass, superClass){ var F = function(){ }; F.PRototype = superClass.prototype; subClass.prototype = new F(); subClass.prototype.constructor = subClass; }

這樣和原型鏈繼承中直接使用subClass.prototype = new superClass()有什么區別呢,作為一項改進,它添加了一個空函數F,并將它創建的對象添加進原型鏈中,這樣可以避免產生superClass的新實例,因為它可能比較龐大。下面是extend函數的使用場景:

function Person(name){ this.name = name; } Person.prototype.getName = function(){ return this.name; } function Author(name, books){ //執行Person構造函數,獲得Person對象中屬性 Person.call(this, name); this.books = books; } //獲得Person原型上的方法,實現原型繼承 extend(Author, Person); //在Author原型上繼續添加我們需要的方法 Author.prototype.getBooks = function(){ return this.books; }

extend的改進

這樣唯一的缺點是在Author構造函數中還出現了Person,耦合程度太高,所以我們需要對extend函數做一些改進

function extend(subClass, superClass){ var F = function(){ }; F.prototype = superClass.prototype; subClass.prototype = new F(); subClass.prototype.constructor = subClass; subClass.superclass = superClass.prototype; //修正原型的constructor指向 if(!superClass.prototype.contrucotor == Object.prototype.constructor){ superClass.prototype.constructor = superClass; } } //使用中 function Author(name, books){ //從superClass.constructor中調用 Author.superClass.constructor.call(this, name) this.books = books; } //獲得Person原型上的方法,實現原型繼承 extend(Author, Person);

clone函數

與基于類的繼承不同,還有一種基于對象的原型式繼承,不需要構造函數

var obj = { name: 'sysuzhyupeng', say: function(){ alert(1); } } var newObj = clone(obj); newObj.name // 'sysuzhyupeng'

來看一下clone函數的源碼

function clone(object){ function F(){} F.prototype = object; return new F; }

clone函數所返回的是一個以給定對象為原型對象的空對象


上一篇:4.組合模式

下一篇:JavaScript 基本語法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰察布市| 德清县| 庆云县| 辰溪县| 大足县| 扶绥县| 普宁市| 清水河县| 寻乌县| 明溪县| 南溪县| 津南区| 济宁市| 龙里县| 衡阳县| 高雄县| 渑池县| 平舆县| 新昌县| 安福县| 徐州市| 阜新市| 正定县| 烟台市| 贡觉县| 枣强县| 安阳市| 湖口县| 图们市| 长葛市| 青海省| 博白县| 乌海市| 漳平市| 建德市| 余江县| 桐柏县| 堆龙德庆县| 尉氏县| 二连浩特市| 新晃|