成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

淺談javascript的原型及原型鏈

includecmath / 3260人閱讀

摘要:在中,主要有兩種創(chuàng)建對(duì)象的方法分別是對(duì)象字面量以及調(diào)用構(gòu)造函數(shù)對(duì)象字面量調(diào)用構(gòu)造函數(shù)其實(shí)上述兩種創(chuàng)建對(duì)象的方法,本質(zhì)上是一樣的,都是引擎調(diào)用對(duì)象的構(gòu)造函數(shù)來(lái)新建出一個(gè)對(duì)象。

原型與原型鏈?zhǔn)莏avascript里面最最核心的內(nèi)容,如果不能理解它們之間的存在關(guān)系的話,那么我們是不能理解這門語(yǔ)言的。

在JS中,主要有兩種創(chuàng)建對(duì)象的方法, 分別是對(duì)象字面量以及調(diào)用構(gòu)造函數(shù)

//對(duì)象字面量
var obj1 = {}

//調(diào)用構(gòu)造函數(shù)
var obj2 = new Object()

其實(shí)上述兩種創(chuàng)建對(duì)象的方法,本質(zhì)上是一樣的,都是JS引擎調(diào)用對(duì)象的構(gòu)造函數(shù)來(lái)新建出一個(gè)對(duì)象。構(gòu)造函數(shù)本身也是一個(gè)普通的JS函數(shù)

下面我們來(lái)看一個(gè)例子

//創(chuàng)建構(gòu)造函數(shù)
function Person(name){
    this.name = name
}

//每個(gè)構(gòu)造函數(shù)JS引擎都會(huì)自動(dòng)添加一個(gè)prototype屬性,我們稱之為原型,這是一個(gè)對(duì)象
//每個(gè)由構(gòu)造函數(shù)創(chuàng)建的對(duì)象都會(huì)共享prototype上面的屬性與方法
console.log(typeof Person.prototype) // "object"


//我們?yōu)镻erson.prototype添加sayName方法
Person.prototype.sayName = function(){
    console.log(this.name)
}

//創(chuàng)建實(shí)例
var person1 = new Person("Messi")
var person2 = new Person("Suarez")

person1.sayName() // "Messi"
person2.sayName() // "Suarez"

person1.sayName === person2.sayName //true

我們借助上面的例子來(lái)理解構(gòu)造函數(shù)-原型-實(shí)例,三者之間的關(guān)系,主要有幾個(gè)基本概念

構(gòu)造函數(shù)默認(rèn)會(huì)有一個(gè)protoype屬性指向它的原型

構(gòu)造函數(shù)的原型會(huì)有一個(gè)consctructor的屬性指向構(gòu)造函數(shù)本身, 即

    Person.prototype.constructor === Person

每一個(gè)new出來(lái)的實(shí)例都有一個(gè)隱式的__proto__屬性,指向它們的構(gòu)造函數(shù)的原型,即

person1.__proto__ === Person.prototype
person1.__proto__.constructor === Person

了解了這些基本概念之后,我們?cè)賮?lái)看看javascript的一些原生構(gòu)造函數(shù)的關(guān)系網(wǎng),看下列的圖


引自stackoverflow

按照我們上面的理解, Oject本身是一個(gè)構(gòu)造函數(shù),它也是一個(gè)對(duì)象,那么

    Object.__proto__ === Function.prototype

為了方便我們記住上圖,還有幾個(gè)需要我們知道的特殊概念:

Function的原型屬性與Function的原型指向同一個(gè)對(duì)象. 即

    Function.__proto__ == Function.prototype

Object.prototype.__proto__ === null

typeof Function.prototype === "function"

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/81516.html

相關(guān)文章

  • 淺談 JavaScript 原型

    摘要:數(shù)組的構(gòu)造函數(shù)是原型鏈的指向與其他除以外的構(gòu)造函數(shù)相同,的也指向頂級(jí)原型對(duì)象,每一個(gè)數(shù)組都是的實(shí)例,都指向。實(shí)例對(duì)象查找構(gòu)造函數(shù)原型對(duì)象的方法一般會(huì)把對(duì)象共有的屬性和方法都放在構(gòu)造函數(shù)的原型對(duì)象上。 showImg(https://segmentfault.com/img/remote/1460000018998704?w=900&h=506); 閱讀原文 概述 在 JavaScr...

    explorer_ddf 評(píng)論0 收藏0
  • 淺談JavaScript原型原型

    摘要:在講原型之前,先簡(jiǎn)單介紹一下幾個(gè)概念構(gòu)造函數(shù)例如上述代碼創(chuàng)建的函數(shù)就被稱為構(gòu)造函數(shù)。同一個(gè)構(gòu)造函數(shù)實(shí)例化得到的多個(gè)對(duì)象具有相同的原型對(duì)象,所以經(jīng)常使用原型對(duì)象來(lái)實(shí)現(xiàn)繼承。實(shí)例對(duì)象通過(guò)操作構(gòu)造函數(shù)所創(chuàng)建的對(duì)象是實(shí)例對(duì)象。 對(duì)于很多前端開發(fā)者而言,JavaScript的原型實(shí)在是很讓人頭疼,所以我這邊就整理了一下自己對(duì)應(yīng)原型的一點(diǎn)理解,分享給大家,供交流使用 原型 說(shuō)起原型,那就不得不說(shuō)p...

    Zoom 評(píng)論0 收藏0
  • 淺談JavaScript原型原型

    摘要:在講原型之前,先簡(jiǎn)單介紹一下幾個(gè)概念構(gòu)造函數(shù)例如上述代碼創(chuàng)建的函數(shù)就被稱為構(gòu)造函數(shù)。同一個(gè)構(gòu)造函數(shù)實(shí)例化得到的多個(gè)對(duì)象具有相同的原型對(duì)象,所以經(jīng)常使用原型對(duì)象來(lái)實(shí)現(xiàn)繼承。實(shí)例對(duì)象通過(guò)操作構(gòu)造函數(shù)所創(chuàng)建的對(duì)象是實(shí)例對(duì)象。 對(duì)于很多前端開發(fā)者而言,JavaScript的原型實(shí)在是很讓人頭疼,所以我這邊就整理了一下自己對(duì)應(yīng)原型的一點(diǎn)理解,分享給大家,供交流使用 原型 說(shuō)起原型,那就不得不說(shuō)p...

    Yang_River 評(píng)論0 收藏0
  • 淺談JavaScript原型

    摘要:在這其中我們就逃不開要討論繼承原型對(duì)象構(gòu)造函數(shù)實(shí)例了。想要獲得某一類型的構(gòu)造函數(shù)可以用來(lái)獲得,也可以對(duì)該屬性進(jìn)行賦值操作。三上面就提到一點(diǎn)是指構(gòu)造函數(shù)的原型對(duì)象,它是一個(gè)對(duì)象,它是構(gòu)造函數(shù)的屬性。 原型鏈這一個(gè)話題,需要和很多概念一起講,才能串成一個(gè)比較系統(tǒng)的知識(shí)點(diǎn)。在這其中我們就逃不開要討論繼承、原型對(duì)象、構(gòu)造函數(shù)、實(shí)例了。 一、構(gòu)造函數(shù) 構(gòu)造函數(shù)是一類特殊的函數(shù),它的作用是用來(lái)生成...

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

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

0條評(píng)論

閱讀需要支付1元查看
<