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

資訊專欄INFORMATION COLUMN

關于javascript的原型和原型鏈,看我就夠了(三)

joyvw / 1577人閱讀

摘要:對于中的引用類型而言,是保存著它們所有實例方法的真正所在。高級程序設計構造函數陌上寒原型對象有一個屬性,指向該原型對象對應的構造函數為什么有屬性那是因為是的實例。

溫故

我們先回顧一下前兩天討論的內容

創建對象的三種方式

通過對象直接量

通過new創建對象

通過Object.create()

js中對象分為兩種

函數對象

普通對象

原型對象prototype

每一個函數對象都有一個prototype屬性,但是普通對象是沒有的;

普通對象都是通過函數創建的

在 ECMAScript 核心所定義的全部屬性中,最耐人尋味的就要數 prototype 屬性了。對于 ECMAScript 中的引用類型而言,prototype 是保存著它們所有實例方法的真正所在。換句話所說,諸如 toString()和 valuseOf() 等方法實際上都保存在 prototype 名下,只不過是通過各自對象的實例訪問罷了。----《JavaScript 高級程序設計》
構造函數constructor
function Foo(name) {
    this.name = name;
}
var foo = new Foo("陌上寒");
 console.log(Foo.prototype.constructor===Foo)//true
 console.log(foo.constructor===Foo);//true

原型對象有一個constructor屬性,指向該原型對象對應的構造函數
foo 為什么有 constructor 屬性?那是因為 foo 是 Foo 的實例。
那 Foo.prototype 為什么有 constructor 屬性??同理, Foo.prototype Foo 的實例。
也就是在 Foo 創建的時候,創建了一個它的實例對象并賦值給它的 prototype

隱式原型_proto_

在Firefox、Safari 和 Chrome 的每個對象上都有這個__proto__,屬性 ,而在其他瀏覽器中是完全不可見的為了確保瀏覽器兼容性問題,不要直接使用 proto 屬性)

// 普通對象的\__proto\__指向當前函數對象的原型,
console.log("陌上寒".__proto__===String.prototype);//true
//原型對象(也屬于普通對象)的__proto__指向當前函數對象的原型
console.log(String.prototype.__proto__===Object.prototype);//true
//內置函數對象的\__proto\__指向的都是? () { [native code] }
console.log(Object.__proto__);//? () { [native code] }
//Object的原型對象的\__proto\__為null
console.log(Object.prototype.__proto__)//null

普通對象的__proto__指向當前函數對象的原型,

原型對象(也屬于普通對象)的__proto__指向當前函數對象的原型

內置函數對象的__proto__指向的都是? () { [native code] }

所有對象(除了Object.prototype)都存在_proto_

Object的原型對象的__proto__為null

好好消化上面的知識點,有助于我么討論新的內容==>原型鏈

知新 原型鏈

原型對象prototype

構造函數constructor

隱式原型_proto_

通過三者之間的聯系,形成了原型鏈
繼續看一下我門昨天討論過的代碼

console.log("陌上寒".__proto__===String.prototype);//true
console.log(String.prototype.__proto__===Object.prototype);//true
//等量代換,得出以下結論
console.log("陌上寒".__proto__.__proto__===Object.prototype);//true

我們剛才說過,普通對象的__proto__指向當前函數對象的原型
我們剛才還說過,普通對象都是通過函數創建的
根據以上兩個結論我們分析一下上面的代碼
‘陌上寒’是字符串類型,’陌上寒’的構造函數是String(), 所以’陌上寒’的__proto__指向String的原型
String是js的內置構造函數,內置構造函數繼承自Object
String的原型對象String.prototype也是一個普通對象,它的__proto__指向Object的原型,即Object.prototype
所以

console.log("陌上寒".__proto__.__proto__===Object.prototype);//true

這就是原型鏈
我們繼續品讀以下代碼

//我們創建一個構造函數Foo(要記得,構造函數命名,首字母要大寫)
function Foo() {}
//通過我們自定義的構造函數。通過new操作符,我們實例化出來一個對象foo
const foo = new Foo()
//對象的__proto__指向當前函數對象(foo是同構Foo實例化出來的,所以foo的函數對象是Foo)的原型
console.log(foo.__proto__===Foo.prototype);
//原型對象也存在__proto__,指向該原型對象(Foo.prototype)所對應的函數對象(Object)的原型(好像有點繞,看代碼就沒那么繞了)
console.log(Foo.prototype.__proto__===Object.prototype);//true
//上面的如果懂了,這行代碼就簡單了,一個數學的等量代換,就得出了結論
console.log(foo.__proto__.__proto__===Object.prototype);//true
console.log("---我是分割線----");
//我們通過字面量創建了一個對象,等同于 const obj = new Object()
const obj = {}
//obj 是通過內置構造函數Object創建的,所以,obj的__proto__指向它的函數對象(Object)的原型(prototype)即:Object.prototype
console.log(obj.__proto__===Object.prototype);//true
console.log("---我是分割線----");//true
//創建一個對象b
const b = {}
//我們之前說過創建對象有三種方式,我們使用第三種方式創建一個對象b1,對象b1繼承自對象b,也就是說,對象b是對象b1的__proto__
const b1 = Object.create(b)
//對象b是對象b1的__proto__
console.log(b1.__proto__===b);//true
//前面已經證實過,b.__proto__==Object.prototype,不再贅述
console.log(b.__proto__==Object.prototype);//true
//等量代換就得出以下結論
console.log(b1.__proto__.__proto__===b.__proto__);//true
console.log(b1.__proto__.__proto__==Object.prototype);//true

我偷了一張圖

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

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

相關文章

  • 關于javascript原型原型,看我夠了(一)

    摘要:要用作原型的對象。函數對象可以創建普通對象,這個我們上面講過了回顧一下這是一個自定義構造函數普通對象沒法創建函數對象,凡是通過創建的對象都是函數對象,其他都是普通對象通常通過創建,可以通過來判斷。 關于js的原型和原型鏈,有人覺得這是很頭疼的一塊知識點,其實不然,它很基礎,不信,往下看要了解原型和原型鏈,我們得先從對象說起 創建對象 創建對象的三種方式: 對象直接量 通過對象直接量創建...

    MoAir 評論0 收藏0
  • 關于javascript原型原型看我夠了(二)

    摘要:原文鏈接關于的原型和原型鏈,看我就夠了一參考鏈接闖關記之原型及原型鏈之原型與原型鏈一篇文章帶你理解原型和原型鏈徹底理解原型鏈一的默認指向圖解和的三角關系原型和原型鏈三張圖搞懂的原型對象與原型鏈 溫故 創建對象的三種方式 通過對象直接量 通過new創建對象 通過Object.create() js中對象分為兩種 函數對象 普通對象 仔細觀察如下代碼 function Foo(na...

    eccozhou 評論0 收藏0
  • 關于javascriptObject. hasOwnProperty,看我夠了

    摘要:基本概念方法會返回一個布爾值,指示對象自身屬性中非繼承屬性是否具有指定的屬性,如果具有帶指定名稱的屬性,則方法返回,否則返回。此方法不會檢查對象原型鏈中的屬性該屬性必須是對象本身的一個成員。使用語法參數,必需。 hasOwnProperty基本概念 hasOwnProperty() 方法會返回一個布爾值,指示對象自身屬性中(非繼承屬性)是否具有指定的屬性,如果 object 具有帶指定...

    mtunique 評論0 收藏0
  • 深入理解JavaScript,這一篇夠了

    摘要:也就是說,所有的函數和構造函數都是由生成,包括本身。如果只考慮構造函數和及其關聯的原型對象,在不解決懸念的情況下,圖形是這樣的可以看到,每一個構造函數和它關聯的原型對象構成一個環,而且每一個構造函數的屬性無所指。 前言  JavaScript 是我接觸到的第二門編程語言,第一門是 C 語言。然后才是 C++、Java 還有其它一些什么。所以我對 JavaScript 是非常有感情的,畢...

    villainhr 評論0 收藏0

發表評論

0條評論

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