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

資訊專欄INFORMATION COLUMN

Javascript面向對象編程

wanglu1209 / 1030人閱讀

摘要:如果要理解基于原型實現面向對象的思想,那么理解中得三個重要概念構造函數原型原型鏈對幫助理解基于原型的面向對象思想就顯得尤為重要。函數對象的原型在中,函數是一種特殊的對象,所有的函數都是構造函數的實例。

介紹

和java這種基于類(class-base)的面向對象的編程語言不同,javascript沒有類這樣的概念,但是javascript也是面向對象的語言,這種面向對象的方式成為 基于原型(prototype-base)的面向對象。雖然說ES6已經引入了類的概念來作為模板,通過關鍵字 “class” 可以定義類,但ES6的這種寫法可以理解為一種語法糖,它的絕大部分功能,ES5都可以做到,新的class寫法只是讓對象原型的寫法更加清晰、更像面向對象編程的語法而已。如果要理解基于原型實現面向對象的思想,那么理解javascript中得三個重要概念: 構造函數(constructor)、原型(prototype)、原型鏈(prototype chain) 對幫助理解基于原型的面向對象思想就顯得尤為重要。下面就重點介紹一下這幾個概念。

javascript對象結構圖

先來看一張來自mollypages.org 的javascript對象的結構圖,下面的例子都按照這張圖闡述。

構造函數(constructor)和原型 (prototype)

構造函數是用來初始化對象的,每個構造函數都有一個不可枚舉的屬性,這就是原型(prototype).并且,每個prototype 都包含一個包含了不可枚舉屬性的constructor屬性,這個屬性始終會指向構造函數。

javascript function Foo(){};
 console.log(Foo.prototype.constructor === Foo); // true

原型鏈(prototype chain) 使用new實例化的原型

每個被new實例化的對象都會包含一個__proto__ 屬性,它是對構造函數 prototype 的引用。

javascript  function Foo(){};
  var foo = new Foo();
  console.log(foo.__proto__ === Foo.prototype); // ture
javascript  function Foo(){};
  console.log(Foo.prototype.__proto__ === Object.prototype); // true

上面返回true 的原因是Foo.prototype 是Object預創建的一個對象,是Object創建的一個實例,所以,Foo.prototype.__proto_ 是Object.prototype的引用。

我們可以來看一下原型鏈的脈絡。

函數(function)對象的原型

在javascript中,函數是一種特殊的對象,所有的函數都是構造函數 Function 的實例。

javascript  function Foo() {};
  console.log(Foo.__proto__ === Object.prototype); //false
  console.log(Fool.__proto__ === Function.prototype); // true

從上面可以看出,函數Foo.__proto_ 指向到 Function.prototype, 說明函數 Foo 是 Function的一個實例。

javascript function Foo(){};
 console.log(Foo.__proto__ === Function.prototype); //true
 console.log(Foo.prototype.__proto__ === Object.prototype);//true

Foo.prototype 是Object預定義的對象,構造函數為Object,所以__proto__指向 Object.prototype

從上面的圖我們可以看出, Object、Function、Array 等這些函數,他們的構造函數都是 Function 的實例。

基于原型鏈的繼承

有了上面的基礎知識以后,我們就可以自己去基于原型鏈去封裝對象,實現javascript的繼承。先來看下面一個例子。

運行上面的例子,輸入 cat init 和 animal eat,說明cat 繼承了 Animal.prototype.eat 的方法。

我們來分析一下代碼。

1、Animal 的prototype中定義了 eat方法。
2、將Empty.prototype 指向 Animal.prototype , 所以 Empty.prototype 中也存在eat方法.
3、Cat.prototype == new Empty(),所以 Cat.prototype.__proto_ === Animal.__proto_.
4、重新為Cat指定constructor為Cat,否則Cat不存在constructor。

這樣就完成了繼承,原型鏈是這樣的:

這樣我們用原型鏈的方式實現了一個簡單的繼承方式。

參考

基于原型的javascript 面向對象編程

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85725.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面向對象編程——面向對象

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

    SimonMa 評論0 收藏0
  • 再和“面向對象”談戀愛 - 面向對象編程概念(三)

    摘要:說到底面向對象才是程序語言的根本。其實面向對象編程說的就是自定義對象。里并沒有類的概念,所以嚴格上來講這是個假的面向對象里的面向對象編程現在好了,終于聽到別人鄙視我們了,給我們提供了類這個概念,其實是向傳統語言更靠齊了。 通過前兩篇文章,我們了解了對象的概念以及面向對象里的相關概念等知識,那前面說了對象分類里的前兩種,這篇文章要詳細去說第三種自定義對象,那真正的好戲這就來了! 面向對象...

    Cruise_Chan 評論0 收藏0

發表評論

0條評論

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