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

資訊專欄INFORMATION COLUMN

為什么都說js 里面任何對象最終都繼承了Object對象

Gemini / 549人閱讀

摘要:今天閑來無事,看見幾行小字。又說所有對象,繼承終是。強行押韻一波這首詩的意思就是說的我今天沒有什么事情,然后無意中又在網(wǎng)上看到了任何對象都是從對象繼承而來的這句話。一時興起,便去驗證這句話。

今天閑來無事,看見幾行小字。
又說所有對象,繼承終是Obj。
—— 強行押韻一波

這首詩的意思就是說的我今天沒有什么事情,然后無意中又在網(wǎng)上看到了“任何對象都是從Object對象繼承而來的”這句話。一時興起,便去驗證這句話。ps. 我好像從來在原型鏈上面都沒有走到過Object對象,我今天一定要把它點出來!

首先我們探究ES5、ES6里面的__proto__、prototype

首先我們從《JavaScript高級程序(第三版)》里面找到這張圖

此圖片告訴了我們2個道理:

1、一個實例的 [[Prototype]] (__proto__屬性),指向它構造函數(shù)的原型對象
這句話聽起來有點兒復雜,把它簡化一下
一個實例的__proto__屬性,指向它的原型對象
2、一個原型對象的constructor屬性又指回了這個對象

下面我們來console一下ES5構造函數(shù)和ES6類的__proto__、prototype
1、es5 和 es6 這兩個實例的__proto__ 指向了它們構造函數(shù)的原型對象(簡稱指向了它們的原型對象)

function ES5Fun(language){
  this.name = "ES6Class類";
  this.language = language;
}
ES5Fun.prototype.favorit = "足球";
let es5 = new ES5Fun("中文");


class ES6Class {
  constructor(props){
    this.className = "ES6Class類"
  }
  printfName(){
    console.log("現(xiàn)在printName準備開始打印")
    this.getName();
  }
  getName(){
    console.log("此類的類名是:" +this.className)
  }
}
let es6 = new ES6Class();


console.log(ES5Fun.prototype)
console.log(ES6Class.prototype)

在chrome中的運行結(jié)果為:

console.log(es5.__proto__ === ES5Fun.prototype)            //true
console.log(es6.__proto__ === ES6Class.prototype)          //true

2、es5 和 es6 這兩個實例的constructor 指向了它們的構造函數(shù)

//這是Node 里面運行的結(jié)果
console.log(es5.constructor)        //[Function: ES5Fun]
console.log(es6.constructor)        //[Function: ES6Class]
console.log(es5.constructor === ES5Fun)            //true
console.log(es6.constructor === ES6Class)          //true

3、構造函數(shù)ES5Fun 和 ES6Class 的原型對象的 constructor 又指回了它們本身

//這是Node 里面的運行結(jié)果
console.log(ES5Fun.prototype.constructor)                //[Function: ES5Fun]        
console.log(ES6Class.prototype.constructor)              //[Function: ES6Class]  
console.log(ES5Fun === ES5Fun.prototype.constructor)                //true
console.log(ES6Class === ES6Class.prototype.constructor)            //true

所以推導出

console.log(es5.constructor === ES5Fun.prototype.constructor)                //true
console.log(es6.constructor === ES6Class.prototype.constructor)              //true
console.log(es5.constructor === es5.__proto__.constructor)                   //true 
console.log(es6.constructor === es6.__proto__.constructor)                   //true   

下面我要開始開車了
準備好了嗎?嘟嘟,嘟嘟。嘟嘟,嘟嘟。

ES5Fun 和 ES6Class 繼續(xù)再往它們的構造函數(shù)和原型對象上面延伸看能得到什么

首先打印出Function對象本身,看看是什么便于后面參考

//Node 下面的執(zhí)行結(jié)果
console.log(Function)        //[Function: Function]

ES6Class的構造函數(shù)是 Function對象

//Node 下面的執(zhí)行結(jié)果
console.log(ES6Class.constructor)          //[Function: Function]
console.log(ES6Class.constructor === Function)           //true

ES6Class的__proto__ 當然也就指向它構造函數(shù)的原型對象

console.log(ES6Class.__proto__)        //[Function]
console.log(ES6Class.__proto__ === Function.prototype)        //true

那么Function的construct屬性呢? 神奇的事情出現(xiàn)了,F(xiàn)unction的construct屬性竟然就等于 ES6Class的constructor屬性

console.log(Function.constructor);
console.log(Function.constructor === ES6Class.constructor)

原因是Function的constructor 沒有指向它的構造函數(shù)而是指向了它本身(或者說Function的構造函數(shù)就是它本身)

console.log(Function.constructor === Function)        //true
console.log(Function.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor)        //[Function: Function]
console.log(Function.constructor === Function.constructor.constructor.constructor.constructor.constructor.constructor)       //true 

Function的原型對象等于 ES6Class.__proto__

console.log(Function.__proto__)                //[Function]
console.log(Function.__proto__ === ES6Class.__proto__)        //true
// 再次證明 Function.constructor 指向它自己
console.log(Function.constructor.__proto__)    //[Function]
console.log(Function.constructor.constructor.constructor.constructor.__proto__)        //[Function]

一個對象的原型對象的constructor 指向這個對象自己,這一點兒Function也不例外

console.log(Function.__proto__.constructor);                //[Function: Function]
console.log(Function.__proto__.constructor === Function);            //true

最后我們終于找到了原型鏈的盡頭 Function原型對象的原型對象是一個{ }

console.log(Function.__proto__.__proto__)        //{}
//它再往上的原型對象是一個null
console.log(Function.__proto__.__proto__.__proto__)        //null
//這個原型對象的constructor指向了Object
console.log(Function.__proto__.__proto__.constructor)      //[Function: Object]
console.log(Function.__proto__.__proto__.constructor === Object)        //true
總結(jié)

1、Function.constructor 指向它本身,不指向它的構造函數(shù)(或者說Function的構造函數(shù)就是它本身)這個我也不太清楚
2、Function.__proto__.__proto__.constructor === Object

console了這么多東西,我先去廁所吐了,兄弟們點個贊再走

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/106249.html

相關文章

  • 說說Prototypal Inheritance

    摘要:因為是一種長程的關聯(lián),基類的修改對繼承者的影響難以估計和維護,具有特性,因此從耦合度的角度說,它大大提高了組件的耦合度,高耦合度不是罪過,但它應對變化的能力變差了。 JavaScript開發(fā)者的繁殖速度和它的語言特性一樣迅猛,這是好事,但是也把JS搞得比任何一種其他語言都更像流行樂,充滿教派和玄學。但編程不是玄學,是科學和工程。這篇文章就用來闡述和探討JavaScript中的一個比較關...

    jzzlee 評論0 收藏0
  • 深度剖析js原型及面向對象

    摘要:返回一個對象先說一個最常用的方法構造函數(shù)獲取所有節(jié)點獲取節(jié)點的長度作用于鏈式調(diào)用測試上面的代碼就可以實現(xiàn)的效果因為我沒讀過源碼。 es5版本:(過兩天寫es6 版本的)由淺入深地講,先說使用, function person(age, sex) { this.age = age; this.sex = sex; this.clothes ...

    Corwien 評論0 收藏0
  • JavaScript即學即用教程[1]-類型系統(tǒng)

    摘要:如圖反而,由于這些的都是繼承自,所以原型鏈拐向了。因此這樣一個實例,他順著原型鏈是找到了如圖選學內(nèi)容如果我們刨根問底,去尋找和的根源的話,那這個問題又稍微有點復雜了。 基本類型 Number, Boolean, String, null, undefined 什么樣的變量是 undefined 聲明了變量卻沒賦值 未聲明的變量 包裝類型 其實js里面也有像java,c#里所謂的包裝...

    toddmark 評論0 收藏0
  • Mobx 源碼閱讀簡記

    摘要:源碼簡記整體會寫得比較亂,同時也比較簡單,和讀書筆記差不多,基本是邊讀邊寫。見諒主要三大部分的原子類,能夠被觀察和通知變化,繼承于。同時里面有幾個比較重要的屬性與方法。 Mobx 源碼簡記 整體會寫得比較亂,同時也比較簡單,和讀書筆記差不多,基本是邊讀邊寫。見諒~ 主要三大部分Atom、Observable、Derivation Atom Mobx的原子類,能夠被觀察和通知變化,obs...

    paulli3 評論0 收藏0
  • JS 兼容、繼承、bind、this

    摘要:我們都說構造函數(shù)開頭首字母大寫但那只是人為的規(guī)定并不是語法。只是一個操作符,任何函數(shù)都能通過來執(zhí)行,并不只是構造函數(shù),只不過我們認為之后的都是構造函數(shù)。 這一篇文章主要是講述一些有關js的小知識點。因為我也不是很精通哪一方面只能把自己知道的一點點寫出來。取名大雜燴也是這意思吧,既然是道菜那么就來嘗嘗我的手藝吧。 第一道菜 1.首先,我想說一下事件綁定。事件綁定我們都知道有:on + t...

    YacaToy 評論0 收藏0

發(fā)表評論

0條評論

Gemini

|高級講師

TA的文章

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