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

資訊專欄INFORMATION COLUMN

JavaScript面向?qū)ο缶幊?封裝

taoszu / 3205人閱讀

摘要:前言面向?qū)ο缶幊淌菍⑿枨蟪橄蟪梢粋€對象,針對對象分析其特征屬性和動作方法。面向?qū)ο缶幊趟枷肫渲幸粋€特點就是封裝,就是把需要的功能放在一個對象里。將閉包作為創(chuàng)建對象的構(gòu)造函數(shù)。

前言

面向?qū)ο缶幊淌菍⑿枨蟪橄蟪梢粋€對象,針對對象分析其特征(屬性)和動作(方法)。這個對象我們稱之為類。面向?qū)ο缶幊趟枷肫渲幸粋€特點就是封裝,就是把需要的功能放在一個對象里。但是JavaScript這種解釋性的弱類型語言沒有經(jīng)典強類型語言中通過關(guān)鍵字class來實現(xiàn)類的封裝,JavaScript都是通過一些特性模仿實現(xiàn)的,這也讓JavaScript有更高的靈活性。

封裝

為類添加屬性和方法的兩種方式

在函數(shù)(類)的內(nèi)部通過this添加屬性和方法

//創(chuàng)建類,通過this實現(xiàn)對類添加屬性和方法
var Book = function (id, bookname, price) {
    this.id = id;
    this.bookname = bookname;
    this.price = price;
}

通過在類的原型上添加屬性和方法

1)為原型對象屬性賦值

Book.prototype.display = function () {
}

2)將一個對象賦值給類的原型對象

Book.prototype = {
    display :function () {
    }
}

這樣就將需要的方法和屬性封裝在抽象的Book類中,當(dāng)使用功能方法時,不能直接使用Book類,而需要new關(guān)鍵字來實例化(創(chuàng)建)新的對象。
注意:通過this添加的屬性和方法是在當(dāng)前對象上添加的,而通過JavaScript是一種基于原型prototype的語言,所以每創(chuàng)建一個對象時,都有一個原型prototype用于指向其繼承的屬性、方法。這樣通過prototype繼承的方法并不是對象自身的。所以每次通過類創(chuàng)建一個新對象時,this指向的屬性和方法都會得到相應(yīng)的創(chuàng)建,但是通過prototype繼承的屬性和方法是每個對象通過prototype訪問到,這些屬性和方法不會再次創(chuàng)建。

通過this創(chuàng)建的屬性是公有屬性,通過this創(chuàng)建的方法是特權(quán)方法,在創(chuàng)建對象時調(diào)用特權(quán)方法可以看做是類的構(gòu)造器。通過new關(guān)鍵字創(chuàng)建新對象時,由于類外面通過點語法添加的屬性和方法沒有執(zhí)行到,所以新創(chuàng)建的對象中無法獲取到,而prototype創(chuàng)建的屬性或方法可以訪問到,所以prototype對象中的屬性和方法稱為共有屬性和方法。
如下:

var Book = function (id, name, price) {
}
Book.isChinese = true;
Book.prototype = {
isJsBook : false,
display :function () {}
}
var b = new Book(11,"ava", 30);
console.log(b.isJsBook);  //false
console.log(b.id);  // 11
console.log(b.idChinese); //undefined
console.log(Book.isChinese);// true
閉包實現(xiàn)

閉包是有權(quán)訪問另一個函數(shù)作用域中變量的函數(shù),即在一個函數(shù)內(nèi)部創(chuàng)建另一個函數(shù)。將閉包作為創(chuàng)建對象的構(gòu)造函數(shù)。

//利用閉包實現(xiàn)
var Book =(function () {
    var bookNum = 0;
    function checkBook(name) {}
    function book(newId,newName,newPrice) {
        var name,price;
        function checkId() {}
        this.getName = function(){};
        this.getPrice = function () {};
        this.setName = function () {};
        this.setPrice = function () {};
        this.id = newId;
        this.copy = function () {};
        bookNum++
        if(bookNum>100){
            throw new Error("100本書");
        }
        this.setName(name);
        this.setName(price);
    }
    _book.prototype = {
        isJsBook :false,
        display:function () {}
    };
    return _book;
})();

由于在創(chuàng)建對象上這種寫法容易忘記使用new而犯錯誤,所以可以使用安全模式創(chuàng)建對象,也就是在創(chuàng)建對象過程中用instanceof判斷this是否是當(dāng)前這個對象。

if(this instanceof Book){
...
}else{
    return new Book()
}

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

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

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    AaronYuan 評論0 收藏0
  • JavaScript設(shè)計模式與開發(fā)實踐 | 01 - 面向對象JavaScript

    摘要:在中,并沒有對抽象類和接口的支持。例如,當(dāng)對象需要對象的能力時,可以有選擇地把對象的構(gòu)造器的原型指向?qū)ο螅瑥亩_到繼承的效果。本節(jié)內(nèi)容為設(shè)計模式與開發(fā)實踐第一章筆記。 動態(tài)類型語言 編程語言按數(shù)據(jù)類型大體可以分為兩類:靜態(tài)類型語言與動態(tài)類型語言。 靜態(tài)類型語言在編譯時已確定變量類型,動態(tài)類型語言的變量類型要到程序運行時,待變量被賦值后,才具有某種類型。 而JavaScript是一門典型...

    suxier 評論0 收藏0
  • JavaScript面向對象編程——面向對象

    摘要:面向?qū)ο竺嫦驅(qū)ο蟮母攀雒嫦驅(qū)ο笫鞘裁疵嫦驅(qū)ο缶幊痰娜Q是,簡稱。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實世界模型的一種編程。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑ο笙嗷f(xié)作的軟件設(shè)計。面向?qū)ο缶幊痰纳礁柚饕奶卣魇欠庋b繼承多態(tài)。 面向?qū)ο?面向?qū)ο蟮母攀?面向?qū)ο笫鞘裁?面向?qū)ο缶幊痰娜Q是Object Oriented Programming,簡稱OOP。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實...

    SimonMa 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<