成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript類(lèi)的寫(xiě)法

OnlyLing / 316人閱讀

摘要:在中,寫(xiě)成類(lèi)的本質(zhì)基本都是構(gòu)造函數(shù)原型。操作符左邊是待檢測(cè)類(lèi)的對(duì)象,右邊是定義類(lèi)的構(gòu)造函數(shù)。不宜用在這里,我們需要知道的幾種定義類(lèi)的方法,除了上面的構(gòu)造函數(shù)外,還有方法用這個(gè)方法,類(lèi)就是一個(gè)對(duì)象,而不是函數(shù)。

js類(lèi)的基本含義

我們知道,在js中,是沒(méi)有類(lèi)的概念的。類(lèi)的所有實(shí)例對(duì)象都從同一個(gè)原型對(duì)象上繼承屬性,因此,原型對(duì)象是類(lèi)的核心。

類(lèi)是對(duì)象的抽象,而對(duì)象是類(lèi)的具體實(shí)例。類(lèi)是抽象的,不占用內(nèi)存,而對(duì)象是具體的,占用存儲(chǔ)空間?!俣劝倏?/p>

早期的javascript需求都很簡(jiǎn)單,基本都是寫(xiě)成函數(shù)的,然后是面向過(guò)程的寫(xiě)法,后來(lái)慢慢的引入面向?qū)ο箝_(kāi)發(fā)思想,再后來(lái)就慢慢寫(xiě)成 類(lèi)。

js中,寫(xiě)成類(lèi)的本質(zhì)基本都是 構(gòu)造函數(shù)+原型。下面,就討論一下js類(lèi)的幾種寫(xiě)法:

構(gòu)造函數(shù) 法
/**
* Person類(lèi):定義一個(gè)人,有name屬性和getName方法
   */

由上面控制臺(tái)輸出結(jié)果可知,p1和p2的確是類(lèi)Person的實(shí)例對(duì)象。instanceof操作符左邊是待檢測(cè)類(lèi)的對(duì)象,右邊是定義類(lèi)的構(gòu)造函數(shù)。這里,instanceof用來(lái)檢測(cè)對(duì)象p1是否屬于Person類(lèi)。

這種方式的優(yōu)點(diǎn)是:我們可以根據(jù)參數(shù)來(lái)構(gòu)造不同的對(duì)象實(shí)例 ,缺點(diǎn)是每次構(gòu)造實(shí)例對(duì)象時(shí)都會(huì)生成getName方法,造成了內(nèi)存的浪費(fèi) 。

我們可以用一個(gè)外部函數(shù)來(lái)代替類(lèi)方法,達(dá)到了每個(gè)對(duì)象共享同一個(gè)方法。改寫(xiě)后的類(lèi)如下:

//外部函數(shù)
原型方式

原型方式的缺點(diǎn)就是不能通過(guò)參數(shù)來(lái)構(gòu)造對(duì)象實(shí)例 (一般每個(gè)對(duì)象的屬性是不相同的) ,優(yōu)點(diǎn)是所有對(duì)象實(shí)例都共享getName方法(相對(duì)于構(gòu)造函數(shù)方式),沒(méi)有造成內(nèi)存浪費(fèi) 。

構(gòu)造函數(shù)+原型方式

取前面兩種的優(yōu)點(diǎn):
a、用構(gòu)造函數(shù)來(lái)定義類(lèi)屬性(字段)。
b、用原型方式來(lái)定義類(lèi)的方法。


這樣,我們就既可以構(gòu)造不同屬性的對(duì)象,也可以讓對(duì)象實(shí)例共享方法,不會(huì)造成內(nèi)存的浪費(fèi)。

為了讓js代碼風(fēng)格更緊湊,我們讓prototype方法代碼移到function Person的大括號(hào)內(nèi)。


在這里,我們需要知道的幾種定義類(lèi)的方法,除了上面的構(gòu)造函數(shù)外,還有:

Object.create()方法

用這個(gè)方法,"類(lèi)"就是一個(gè)對(duì)象,而不是函數(shù)。

 var Person = {
        name : "trigkit4",
        age : 21,
        run:  function(){
            alert("I like running");
        }
    }

然后,直接用Object.create()生成實(shí)例,不需要用到new。

var p1 = Object.create(Person);
    alert(p1.age);//21
    p1.run();//I like running

這種方法比"構(gòu)造函數(shù)法"簡(jiǎn)單,但是不能實(shí)現(xiàn)私有屬性和私有方法,實(shí)例對(duì)象之間也不能共享數(shù)據(jù),對(duì)"類(lèi)"的模擬不夠全面。

createNew()方法

這種方法不需要用到this和prototype,其做法是用對(duì)象來(lái)模擬一個(gè)類(lèi),然后在類(lèi)里面定義一個(gè)構(gòu)造函數(shù)createNew(),然后在createNew()里面定義實(shí)例對(duì)象,把這個(gè)實(shí)例對(duì)象作為返回值。

使用的時(shí)候,調(diào)用createNew()方法,就可以得到實(shí)例對(duì)象。

 var p1 = Person.createNew();
    p1.run();//I like running

這種寫(xiě)法其實(shí)和對(duì)象字面量的寫(xiě)法是很類(lèi)似的,只不過(guò)一個(gè)是逗號(hào)分隔,一個(gè)是分號(hào)分隔。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85332.html

相關(guān)文章

  • JavaScript的es6的class使用

    摘要:記錄的學(xué)習(xí)筆記,在回答別人的問(wèn)題時(shí)發(fā)現(xiàn)自己的的理解誤差很大的在沒(méi)有帶來(lái)的的時(shí)候,我們編寫(xiě)的時(shí)候很多時(shí)候會(huì)通過(guò)構(gòu)造函數(shù)和原型鏈來(lái)添加方法屬性,實(shí)現(xiàn)的功能。而是看成是構(gòu)造函數(shù)的寫(xiě)法。等同于類(lèi)的實(shí)例對(duì)象就像使用構(gòu)造函數(shù)一樣使用命令來(lái)創(chuàng)建一個(gè)實(shí)例。 記錄class的學(xué)習(xí)筆記,在回答別人的問(wèn)題時(shí)發(fā)現(xiàn)自己的的理解誤差很大 javascript的class 在沒(méi)有es6帶來(lái)的class的時(shí)候,我們編...

    zgbgx 評(píng)論0 收藏0
  • JavaScript 的對(duì)象繼承方式,有幾種寫(xiě)法?

    摘要:四混合方式對(duì)象冒充的主要問(wèn)題是必須使用構(gòu)造函數(shù)方式,這不是最好的選擇。在中創(chuàng)建類(lèi)的最好方式是用構(gòu)造函數(shù)定義屬性,用原型定義方法。注意,雖然代表了父類(lèi)的構(gòu)造函數(shù),但是返回的是子類(lèi)的實(shí)例,即內(nèi)部的指的是,因此在這里相當(dāng)于。 一、對(duì)象冒充 其原理如下:構(gòu)造函數(shù)使用 this 關(guān)鍵字給所有屬性和方法賦值(即采用類(lèi)聲明的構(gòu)造函數(shù)方式)。因?yàn)闃?gòu)造函數(shù)只是一個(gè)函數(shù),所以可使 Parent 構(gòu)造函數(shù) ...

    gggggggbong 評(píng)論0 收藏0
  • 對(duì)象的繼承(原型鏈)

    摘要:規(guī)定,每個(gè)函數(shù)都有一個(gè)屬性,指向一個(gè)對(duì)象大毛二毛構(gòu)造函數(shù)的屬性,就是實(shí)例對(duì)象和的原型對(duì)象。這就是所有對(duì)象都有和方法的原因,因?yàn)檫@是從繼承的構(gòu)造函數(shù)的屬性指向一個(gè)數(shù)組,就意味著實(shí)例對(duì)象可以調(diào)用數(shù)組方法。 目錄 [隱藏] 原型對(duì)象概述構(gòu)造函數(shù)的缺點(diǎn)prototype 屬性的作用原型鏈constructor 屬性instanceof 運(yùn)算符構(gòu)造函數(shù)的繼承多重繼承模塊基本的實(shí)現(xiàn)方法封裝私有變量...

    big_cat 評(píng)論0 收藏0
  • 《深入理解ES6》筆記—— JavaScript中的類(lèi)class(9)

    摘要:新建一個(gè)類(lèi)該函數(shù)返回一個(gè)類(lèi)的實(shí)例給函數(shù)傳入通過(guò)立即調(diào)用類(lèi)構(gòu)造函數(shù)可以創(chuàng)建單例。派生類(lèi)是指繼承自其它類(lèi)的新類(lèi)。在構(gòu)造函數(shù)中訪(fǎng)問(wèn)之前要調(diào)用,負(fù)責(zé)初始化。在構(gòu)造函數(shù)中使用通常表示當(dāng)前的構(gòu)造函數(shù)名。 ES5中的近類(lèi)結(jié)構(gòu) ES5以及之前的版本,沒(méi)有類(lèi)的概念,但是聰明的JavaScript開(kāi)發(fā)者,為了實(shí)現(xiàn)面向?qū)ο?,?chuàng)建了特殊的近類(lèi)結(jié)構(gòu)。 ES5中創(chuàng)建類(lèi)的方法:新建一個(gè)構(gòu)造函數(shù),定義一個(gè)方法并且賦值...

    gggggggbong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<