您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)javascript如何定義類,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
JavaScript定義類的三個方法:1、利用構(gòu)造函數(shù)定義類,語法為“function name(){this.name=value;}”;2、利用“Object.create()”方法定義類;3、利用“createNew()”方法定義類。
本教程操作環(huán)境:windows10系統(tǒng)、javascript1.8.5版、Dell G3電腦。
在面向?qū)ο缶幊讨校?class)是對象(object)的模板,定義了同一組對象(又稱"實例")共有的屬性和方法。
JavaScript語言不支持"類",但是可以用一些變通的方法,模擬出"類"。
一、構(gòu)造函數(shù)法
這是經(jīng)典方法,也是教科書必教方法。它用構(gòu)造函數(shù)模擬"類",在其內(nèi)部用this關(guān)鍵字指代實例對象。
function Cat(){ this.name = "大毛"; }
生成實例的時候,使用new關(guān)鍵字。
var cat1 = new Cat(); alert(cat1.name); //大毛
類的屬性和方法,還可以定義在構(gòu)造函數(shù)的prototype對象之上。
Cat.prototype.makeSound = function(){ alert("喵喵喵"); }
關(guān)于這種方法的詳細(xì)介紹,請看系列文章《JavaScript面向?qū)ο缶幊獭?,這里就不多說了。它的主要缺點是,必教復(fù)雜,用到this和prototype,編寫和閱讀都很費力。
二、Object.create()法
為了解決"構(gòu)造函數(shù)法"的缺點,更方便地生成對象,JavaScript的國際標(biāo)準(zhǔn)ECMAScript第五版(目前通行的是第三版),提出了一個新的方法Object.create()。
用這個方法,"類"就是一個對象,不是函數(shù)。
var Cat = { name: "大毛", makeSound: function(){ alert("喵喵喵"); } };
然后,直接用Object.create()生成實例,不需要用到new。
var cat1 = Object.create(Cat); alert(cat1.name); //大毛 cat1.makeSound(); //喵喵喵
目前,各大瀏覽器的最新版本(包括IE9)都部署了這個方法。如果遇到老式瀏覽器,可以用下面的代碼自行部署。
if(!Object.create){ Object.create = function(o){ function F(){}; F.prototype = o; return new F(); } }
這種方法比"構(gòu)造函數(shù)法"簡單,但是不能實現(xiàn)私有屬性和私有方法,實例對象之間也不能共享數(shù)據(jù),對"類"的模擬不夠全面。
三、極簡主義法
荷蘭程序員Gabor de Mooij 提出了一種比Object.create()更好的新方法,它稱這種方法為"極簡主義法"(minimalist approach)。這也是我推薦的方法。
3.1 封裝
這種方法不適用this和prototype,代碼部署起來非常簡單,這大概也是它被叫做"極簡主義法"的原因。
首先,它也是用一個對象模擬"類"。在這個類里面,定義一個構(gòu)造函數(shù)caeateNew(),用來生成實例。
var Cat = { createNew: function(){ //some code here } };
然后,在carateNew()里面,定義一個實例對象,把這個實例對象作為返回值。
var Cat = { createNew: function(){ var cat = {}; cat.name = "大毛"; car.makeSound = function(){ alert("喵喵喵"); }; } };
使用的時候,調(diào)用createNew()方法,就可以得到實例對象。
var cat1 = Cat.createNew(); cat1.makeSound(); //喵喵喵
這種方法的好處是,容易理解,結(jié)構(gòu)清晰優(yōu)雅,符合傳統(tǒng)的"面向?qū)ο缶幊?quot;的構(gòu)造,因此可以方便地部署下面的特性。
關(guān)于“javascript如何定義類”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。