JavaScript 「類」定義 繼承 閉包 封裝

1、Javascript 「類」:

          類:在面向對象編程中,類(class)是對象(object)的模板,定義了同一組對象(又稱"實例")共有的屬性和方法。javascript

          Javascript是一種基於對象(object-based)的語言,你遇到的全部東西幾乎都是對象。可是,它又不是一種真正的面向對象編程(OOP)語言,由於它的語法中沒有class(類)html

可是,咱們在javascript中能夠模擬出「類」 。 總結的阮一峯的定義類(class)的三種方法java

      1> 構造函數法 

          構造函數 模擬"類",在其內部用this關鍵字指代實例對象。編程

          生成實例的時候,使用new關鍵字。閉包

          類的屬性和方法,還能夠定義在構造函數的prototype對象之上。ide

      2> Object.create() 

         Javascript的國際標準ECMAScript第五版(目前通行的是第三版),提出了一個新的方法Object.create()。函數

          用這個方法,"類"就是一個對象,不是函數。oop

      3> 極簡主義法

           首先,它也是用一個對象模擬"類"。在這個類的內部,定義一個構造函數createNew(),用來生成實例。this

           而後,在createNew()的內部,定義一個實例對象,把這個實例對象做爲返回值。idea

2、Javascript 繼承

 在基於類的語言中,對象是類的實例,而且類能夠從另外一個類繼承,如Java;JavaScript則是一門基於原型的語言,以原型鏈實現繼承,其對象能夠直接繼承另外一對象

Javascript語言的繼承機制。            總結自阮一峯的繼承機制的設計思想 構造函數的繼承  非構造函數的繼承      湯姆大叔 強大的原型和原型鏈

它沒有"子類"和"父類"的概念,也沒有"類"(class)和"實例"(instance)的區分,全靠一種很奇特的"原型鏈"(prototype chain)模式,來實現繼承。

JavaScript 不包含傳統的類繼承模型,而是使用 prototype 原型模型  來 實現繼承。

涉及到繼承這一塊,Javascript 只有一種結構,那就是:對象。

在 javaScript 中,每一個對象都有一個指向它的原型(prototype)對象的內部連接。(使用構造函數法模擬類 函數還是 對象)這個原型對象又有本身的原型,直到某個對象的原型爲null 爲止(也就是再也不有原型指向),組成這條鏈的最後一環。這種一級一級的鏈結構就稱爲原型鏈(prototype chain)。

原型

Javascript中建立的每一個函數都有一個prototype屬性,這個屬性是一個指針,指向一個對象,這個對象的做用便是包含能夠由特定類型實例共享的屬性和方法,這個對象就是函數的原型對象。

默認狀況,全部的原型對象都會有一個constructor屬性,這個屬性包含一個指向prototype屬性所在函數的指針。

調用構造函數建立一個新實例後,實例的內部將包含一個指向構造函數原型對象的指針,在ECMA-262中定義此指針爲[[Prototype]],並不能被顯式的訪問到,而在Firefox,Safari和Chrome中每一個對象上有一個__proto__屬性。

__proto__顯示的是實例與構造函數原型對象間的關係,而非實例與構造函數間的關係。

繼承的實現:

2.1 構造函數的繼承

1.構造函數綁定

2.2 非構造函數的繼承

3、JavaScript  閉包

閉包是指函數有自由獨立的變量。換句話說,定義在閉包中的函數能夠「記憶」它建立時候的環境。

閉包容許將函數與其所操做的某些數據(環境)關連起來。

在循環中建立閉包:一個常見錯誤  未完待續 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

4、封裝

封裝

相關文章
相關標籤/搜索