推薦JavaScript實(shí)現(xiàn)繼承的最佳方式
實(shí)現(xiàn)JavaScript繼承的最簡(jiǎn)單的方式是call方法(或者apply方法)及原型鏈方法,但這兩種方法都有缺陷,而其混合體就是很好的繼承實(shí)現(xiàn)方式。下面舉例說(shuō)明:
function Animal(age){
this.age = age;
}
Animal.prototype.sayAge = function(){
window.alert("My age is "+this.age+"!");
};
function Dog(age,name){
Animal.call(this,age);
this.name = name;
}
Dog.prototype = new Animal();
Dog.prototype.sayName = function(){
window.alert("I am a "+this.name+"!");
};
var dog = new Dog(15,"dog");
dog.sayName();
dog.sayAge();
對(duì)于類Animal來(lái)說(shuō),它有一個(gè)字段屬性age及函數(shù)屬性sayAge,sayAge方法的定義采用的是原型方式。Dog類要繼承Animal,其字段屬性除了age外還有name,通過(guò)Animal.call(this,age);可以實(shí)現(xiàn)Dog繼承Animal的字段屬性age并將其初始化了。call方法的第一個(gè)參數(shù)為繼承的類的this指針,第二個(gè)參數(shù)為Animal類的構(gòu)造函數(shù)的參數(shù)。實(shí)際上,只是通過(guò)call方法就可以實(shí)現(xiàn)繼承,但唯一的要求是父類的函數(shù)屬性要在構(gòu)造函數(shù)中定義,這對(duì)于這里的函數(shù)屬性使用原型方式定義來(lái)說(shuō)就不適合了(采用原型方式定義函數(shù)屬性比在構(gòu)造函數(shù)內(nèi)定義更直觀一些)。要想繼承Animal的原型方式定義的函數(shù)屬性,需要的語(yǔ)句就是“Dog.prototype = new Animal();”。而Dog類中的sayName()函數(shù)則是其自身的函數(shù)屬性了。
除了這個(gè)最經(jīng)典的實(shí)現(xiàn)繼承的方式外,目前還有一些免費(fèi)的庫(kù)可供使用。但想到形形色色的庫(kù),頭就大了,有時(shí)間有必要時(shí)再研究吧!
相關(guān)文章
詳解JavaScript中雙等號(hào)引起的隱性類型轉(zhuǎn)換
JavaScript中由==判斷所引起的轉(zhuǎn)換會(huì)引發(fā)解釋器的一些列執(zhí)行步驟,接下來(lái)我們就來(lái)詳解JavaScript中雙等號(hào)引起的隱性類型轉(zhuǎn)換,需要的朋友可以參考下2016-05-05jquery中prop()方法和attr()方法的區(qū)別淺析
官方例舉的例子感覺和attr()差不多,也不知道有什么區(qū)別,既然有了prop()這個(gè)新方法,不可能沒用吧,那什么時(shí)候該用attr(),什么時(shí)候該用prop()呢2013-09-09javascript中的作用域和上下文使用簡(jiǎn)要概述
下面全面揭示了javascript中的上下文和作用域的不同,以及各種設(shè)計(jì)模式如何使用他們,感興趣的朋友不要錯(cuò)過(guò)2013-12-12JavaScript學(xué)習(xí)筆記之Cookie對(duì)象
本文主要簡(jiǎn)單介紹了javascript中cookie對(duì)象的概念,以及cookie的讀取,寫入,刪除操作的方法,并附上示例,非常不錯(cuò),這里推薦給小伙伴們。2015-01-01