如何用JavaScript定義一個(gè)類
我原來的寫法都是這樣:
function Dog(){ this.name = 'hachi'; } Dog.prototype = { makeNoise:function(){ alert('wangwangwang'); } };
后來又看到另外一種復(fù)雜一點(diǎn)而且看起來好像沒有必要的寫法:
function Dog(){ var privateVariable = 'secret'; var fn = function(){ //... } fn.prototype = { makeNoise:function(){ alert('wangwangwang'); } } return fn; }
這里的Dog函數(shù)其實(shí)是一個(gè) 制造類 的函數(shù),它返回了真正的Dog類。
感覺這樣做的好處是更好的實(shí)現(xiàn)了封裝。
例如這里的privateVariable就是一個(gè)私有變量:
var d = new Dog; d.privateVariable //undefined
另外如果在第一個(gè)例子的最后加上一句:
Dog.prototype = { //e...WTF?? }
這樣Dog就不是Dog了~
后來的理解:
上面這樣新建類的方法直接重寫了prototype對(duì)象。這樣prototype原本內(nèi)置的屬性就沒有了(arguments, call, apply等)。
下面這種新建類的方法好像更好一些:
var Dog = function(name){ this.name = name; var privateVariable = 'you cannot see me.'; this.getPrivate = function(){return privateVariable;}; }
相關(guān)文章
Javascript基礎(chǔ)教程之?dāng)?shù)組 array
Array是JavaScript中常用的類型,并且JavaScript中的數(shù)組和其他語言的數(shù)組有比較大的區(qū)別。JavaScript中數(shù)組中存放的數(shù)據(jù)類型不一定相同,而且數(shù)組的長(zhǎng)度也是可改變的。2015-01-01深入了解JavaScript中的this關(guān)鍵字指向
這篇文章主要介紹了深入了解JavaScript中的this關(guān)鍵字指向,在大多情況下,this出現(xiàn)在函數(shù)中,this指向什么,跟函數(shù)定義的位置無關(guān),跟函數(shù)調(diào)用方式有關(guān),需要的朋友可以參考下2023-07-07jquery中prop()方法和attr()方法的區(qū)別淺析
官方例舉的例子感覺和attr()差不多,也不知道有什么區(qū)別,既然有了prop()這個(gè)新方法,不可能沒用吧,那什么時(shí)候該用attr(),什么時(shí)候該用prop()呢2013-09-09用JavaScript實(shí)現(xiàn)對(duì)話框的教程
這篇文章主要介紹了用JavaScript實(shí)現(xiàn)對(duì)話框的教程,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06JavaScript 入門·JavaScript 具有全范圍的運(yùn)算符
JavaScript 入門·JavaScript 具有全范圍的運(yùn)算符...2007-10-10javascript學(xué)習(xí)筆記(十四) window對(duì)象使用介紹
javascript學(xué)習(xí)筆記之window對(duì)象使用介紹,需要的朋友可以參考下2012-06-06深入理解JavaScript系列(33):設(shè)計(jì)模式之策略模式詳解
這篇文章主要介紹了深入理解JavaScript系列(33):設(shè)計(jì)模式之策略模式詳解,策略模式定義了算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化不會(huì)影響到使用算法的客戶,需要的朋友可以參考下2015-03-03js實(shí)現(xiàn)unicode碼字符串與utf8字節(jié)數(shù)據(jù)互轉(zhuǎn)詳解
這篇文章主要介紹了js實(shí)現(xiàn)unicode碼字符串與utf8字節(jié)數(shù)據(jù)互轉(zhuǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03