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

資訊專欄INFORMATION COLUMN

重學(xué)前端學(xué)習(xí)筆記(九)--JavaScript中的對象分類

tinna / 1447人閱讀

摘要:固有對象由標準規(guī)定,隨著運行時創(chuàng)建而自動創(chuàng)建的對象實例。普通對象由語法構(gòu)造器或者關(guān)鍵字定義類創(chuàng)建的對象,它能夠被原型繼承。

筆記說明
重學(xué)前端是程劭非(winter)【前手機淘寶前端負責(zé)人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請聯(lián)系我,郵箱:kaimo313@foxmail.com。
一、javaScript對象分類介紹 1.0、宿主對象(host Objects)
由 JavaScript 宿主環(huán)境提供的對象,它們的行為完全由宿主環(huán)境決定。
1.1、內(nèi)置對象(Built-in Objects)
由 JavaScript 語言提供的對象。
1.1.0、固有對象(Intrinsic Objects )
由標準規(guī)定,隨著 JavaScript 運行時創(chuàng)建而自動創(chuàng)建的對象實例。
1.1.1、原生對象(Native Objects)
可以由用戶通過 Array、RegExp 等內(nèi)置構(gòu)造器或者特殊語法創(chuàng)建的對象。
1.1.2、普通對象(Ordinary Objects)
{} 語法、Object 構(gòu)造器或者 class 關(guān)鍵字定義類創(chuàng)建的對象,它能夠被原型繼承。

下面winter主要介紹了普通對象之外的對象原型(剛好都是我不太懂的,mark一下)

二、宿主對象 2.0、window對象

全局對象 window 上的屬性,一部分來自 JavaScript 語言,一部分來自瀏覽器環(huán)境

宿主也會提供一些構(gòu)造器,比如使用 new Image來創(chuàng)建 img 元素(winter下次會講瀏覽器的API,到時再詳細的mark一下)

三、內(nèi)置對象·固有對象 3.0、簡單介紹

固有對象在任何 JS 代碼執(zhí)行前就已經(jīng)被創(chuàng)建出來,類似基礎(chǔ)庫的角色

ECMA 標準為我們提供了一份固有對象表,里面含有 150+ 個固有對象(鏈接打開比較慢,稍等一下就好)

3.1、小實驗:獲取全部 JavaScript 固有對象 3.1.0、三個值
Infinity、NaN、undefined
3.1.1、九個函數(shù)
eval、isFinite、isNaN、parseFloat、parseInt、decodeURI decodeURIComponent、encodeURI、encodeURIComponent
3.1.2、一些構(gòu)造器
Array、Date、RegExp、Promise、Proxy、Map、WeakMap、Set、WeapSet、Function、Boolean、String、Number、Symbol、Object、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError URIError、ArrayBuffer、SharedArrayBuffer、DataView、Typed Array、Float32Array、Float64Array、Int8Array、Int16Array、Int32Array、UInt8Array、UInt16Array、UInt32Array、UInt8ClampedArray
3.1.3、四個用于當作命名空間的對象
Atomics、JSON、Math、Reflect
3.1.4、處理方法

1、winter的做法:使用廣度優(yōu)先搜索,查找這些對象所有的屬性和 Getter/Setter,就可以獲得 JavaScript 中所有的固有對象。

2、下面代碼可以研究一下看看,new Set()不懂的可以看看MDN關(guān)于set的介紹,(我現(xiàn)在還沒有看明白,我去不同網(wǎng)頁打開運行輸出set不一樣,感覺有點懵逼_(:3」∠)_,理解的大佬可以留言告訴我,不勝感激)

var set = new Set();
var objects = [
    eval,
    isFinite,
    isNaN,
    parseFloat,
    parseInt,
    decodeURI,
    decodeURIComponent,
    encodeURI,
    encodeURIComponent,
    Array,
    Date,
    RegExp,
    Promise,
    Proxy,
    Map,
    WeakMap,
    Set,
    WeakSet,
    Function,
    Boolean,
    String,
    Number,
    Symbol,
    Object,
    Error,
    EvalError,
    RangeError,
    ReferenceError,
    SyntaxError,
    TypeError,
    URIError,
    ArrayBuffer,
    SharedArrayBuffer,
    DataView,
    Float32Array,
    Float64Array,
    Int8Array,
    Int16Array,
    Int32Array,
    Uint8Array,
    Uint16Array,
    Uint32Array,
    Uint8ClampedArray,
    Atomics,
    JSON,
    Math,
    Reflect];
objects.forEach(o => set.add(o));

for(var i = 0; i < objects.length; i++) {
    var o = objects[i]
    for(var p of Object.getOwnPropertyNames(o)) {
        var d = Object.getOwnPropertyDescriptor(o, p)
        if( (d.value !== null && typeof d.value === "object") || (typeof d.value === "function"))
            if(!set.has(d.value))
                set.add(d.value), objects.push(d.value);
        if( d.get )
            if(!set.has(d.get))
                set.add(d.get), objects.push(d.get);
        if( d.set )
            if(!set.has(d.set))
                set.add(d.set), objects.push(d.set);
    }
}
四、內(nèi)置對象·原生對象 4.0、分類
winter按照不同應(yīng)用場景,將原生對象分成了以下幾個種類

4.1、注意的幾個點

可以用 new 運算創(chuàng)建新的對象

幾乎所有這些構(gòu)造器的能力都是無法用純 JavaScript 代碼實現(xiàn)

也無法用 class/extend 語法來繼承

創(chuàng)建的對象多數(shù)使用了私有字段,比如:Error: [[ErrorData]]...這些字段使得原型繼承方法無法正常工作

所有這些原生對象都是為了特定能力或者性能,而設(shè)計出來的特權(quán)對象

五、用對象來模擬函數(shù)與構(gòu)造器:函數(shù)對象與構(gòu)造器對象 5.0、函數(shù)對象的定義
具有 [[call]] 私有字段的對象

[[call]] 私有字段必須是一個引擎中定義的函數(shù),需要接受 this 值和調(diào)用參數(shù),并且會產(chǎn)生域的切換

5.1、構(gòu)造器對象的定義
具有 [[construct]] 私有字段的對象
5.1.0、[[construct]] 的大致執(zhí)行過程

1、以 Object.protoype 為原型創(chuàng)建一個新對象
2、以新對象為 this,執(zhí)行函數(shù)的 [[call]]
3、如果 [[call]] 的返回值是對象,那么,否則返回第一步創(chuàng)建的新對象

5.2、例子

1、內(nèi)置對象 Date 在作為構(gòu)造器調(diào)用時產(chǎn)生新的對象,作為函數(shù)時,則產(chǎn)生字符串,見以下代碼:

console.log(new Date);
console.log(Date())

2、瀏覽器宿主環(huán)境中,提供的 Image 構(gòu)造器,則根本不允許被作為函數(shù)調(diào)用。

console.log(new Image);
console.log(Image()); // 拋出錯誤 Uncaught TypeError: Failed to construct "Image": Please use the "new" operator, this DOM object constructor cannot be called as a function."Image"

3、基本類型(String、Number、Boolean),它們的構(gòu)造器被當作函數(shù)調(diào)用,則產(chǎn)生類型轉(zhuǎn)換的效果

4、在 ES6 之后 => 語法創(chuàng)建的函數(shù)僅僅是函數(shù),它們無法被當作構(gòu)造器使用,見以下代碼:

new (a => 0) // 報錯:Uncaught TypeError: (intermediate value) is not a constructor

5、使用 function 語法或者 Function 構(gòu)造器創(chuàng)建的對象來說,[[call]][[construct]] 行為總是相似的,它們執(zhí)行同一段代碼。

function f(){
    return 1;
}
var v = f(); // 把 f 作為函數(shù)調(diào)用
var o = new f(); // 把 f 作為構(gòu)造器調(diào)用

6、如果構(gòu)造器返回了一個新的對象,那么 new 創(chuàng)建的新對象就變成了一個構(gòu)造函數(shù)之外完全無法訪問的對象,這一定程度上可以實現(xiàn)私有

function cls(){
    this.a = 100;
    return {
        getValue: () => this.a
    }
}
var o = new cls;
o.getValue(); //100
//a 在外面永遠無法訪問到
六、特殊行為的對象 6.0、行為不大一樣的對象
winter總結(jié)了常見的下標運算(就是使用中括號或者點來做屬性訪問)或者設(shè)置原型跟普通對象不同的對象,如下:

ArrayArraylength 屬性根據(jù)最大的下標自動發(fā)生變化。

Object.prototype:作為所有正常對象的默認原型,不能再給它設(shè)置原型了。

String:為了支持下標運算,String 的正整數(shù)屬性訪問會去字符串里查找。

Argumentsarguments 的非負整數(shù)型下標屬性跟對應(yīng)的變量聯(lián)動。

模塊的 namespace 對象:特殊的地方非常多,跟一般對象完全不一樣,盡量只用于 import

類型數(shù)組和數(shù)組緩沖區(qū):跟內(nèi)存塊相關(guān)聯(lián),下標運算比較特殊

bind 后的 function:跟原來的函數(shù)相關(guān)聯(lián)

個人總結(jié)

看完這篇,有點崩潰,現(xiàn)在已經(jīng)凌晨2點48了,還沒搞懂,感覺之前學(xué)的過于皮毛,這些東西看起來一臉懵逼,哈哈哈...,有時間在好好加強一下這塊的知識

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

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

相關(guān)文章

  • 重學(xué)前端學(xué)習(xí)筆記)--JavaScript中的對象分類

    摘要:固有對象由標準規(guī)定,隨著運行時創(chuàng)建而自動創(chuàng)建的對象實例。普通對象由語法構(gòu)造器或者關(guān)鍵字定義類創(chuàng)建的對象,它能夠被原型繼承。 筆記說明 重學(xué)前端是程劭非(winter)【前手機淘寶前端負責(zé)人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請聯(lián)系我,郵箱:ka...

    ShowerSun 評論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記)--JavaScript中的對象分類

    摘要:固有對象由標準規(guī)定,隨著運行時創(chuàng)建而自動創(chuàng)建的對象實例。普通對象由語法構(gòu)造器或者關(guān)鍵字定義類創(chuàng)建的對象,它能夠被原型繼承。 筆記說明 重學(xué)前端是程劭非(winter)【前手機淘寶前端負責(zé)人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請聯(lián)系我,郵箱:ka...

    dantezhao 評論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(二十七)--JavaScript的詞法

    摘要:模板語法四種詞法定義二空白符號空白符號分類或稱是,是縮進符,字符串中寫的。注意換行符會影響的兩個重要語法特性自動插入分號和規(guī)則。 筆記說明 重學(xué)前端是程劭非(winter)【前手機淘寶前端負責(zé)人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語音】,如有侵權(quán)請聯(lián)系我,郵箱...

    jayzou 評論0 收藏0

發(fā)表評論

0條評論

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