国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript面向對象編程-封裝

taoszu / 3198人閱讀

摘要:前言面向對象編程是將需求抽象成一個對象,針對對象分析其特征屬性和動作方法。面向對象編程思想其中一個特點就是封裝,就是把需要的功能放在一個對象里。將閉包作為創建對象的構造函數。

前言

面向對象編程是將需求抽象成一個對象,針對對象分析其特征(屬性)和動作(方法)。這個對象我們稱之為類。面向對象編程思想其中一個特點就是封裝,就是把需要的功能放在一個對象里。但是JavaScript這種解釋性的弱類型語言沒有經典強類型語言中通過關鍵字class來實現類的封裝,JavaScript都是通過一些特性模仿實現的,這也讓JavaScript有更高的靈活性。

封裝

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

在函數(類)的內部通過this添加屬性和方法

//創建類,通過this實現對類添加屬性和方法
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類中,當使用功能方法時,不能直接使用Book類,而需要new關鍵字來實例化(創建)新的對象。
注意:通過this添加的屬性和方法是在當前對象上添加的,而通過JavaScript是一種基于原型prototype的語言,所以每創建一個對象時,都有一個原型prototype用于指向其繼承的屬性、方法。這樣通過prototype繼承的方法并不是對象自身的。所以每次通過類創建一個新對象時,this指向的屬性和方法都會得到相應的創建,但是通過prototype繼承的屬性和方法是每個對象通過prototype訪問到,這些屬性和方法不會再次創建。

通過this創建的屬性是公有屬性,通過this創建的方法是特權方法,在創建對象時調用特權方法可以看做是類的構造器。通過new關鍵字創建新對象時,由于類外面通過點語法添加的屬性和方法沒有執行到,所以新創建的對象中無法獲取到,而prototype創建的屬性或方法可以訪問到,所以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
閉包實現

閉包是有權訪問另一個函數作用域中變量的函數,即在一個函數內部創建另一個函數。將閉包作為創建對象的構造函數。

//利用閉包實現
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;
})();

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97838.html

相關文章

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

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

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

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

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

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

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

    摘要:在中,并沒有對抽象類和接口的支持。例如,當對象需要對象的能力時,可以有選擇地把對象的構造器的原型指向對象,從而達到繼承的效果。本節內容為設計模式與開發實踐第一章筆記。 動態類型語言 編程語言按數據類型大體可以分為兩類:靜態類型語言與動態類型語言。 靜態類型語言在編譯時已確定變量類型,動態類型語言的變量類型要到程序運行時,待變量被賦值后,才具有某種類型。 而JavaScript是一門典型...

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

    摘要:面向對象面向對象的概述面向對象是什么面向對象編程的全稱是,簡稱。面向對象編程是用抽象方式創建基于現實世界模型的一種編程。面向對象編程可以看做是使用一系列對象相互協作的軟件設計。面向對象編程的山歌主要的特征是封裝繼承多態。 面向對象 面向對象的概述 面向對象是什么 面向對象編程的全稱是Object Oriented Programming,簡稱OOP。面向對象編程是用抽象方式創建基于現實...

    SimonMa 評論0 收藏0

發表評論

0條評論

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