真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

javascript對象分為哪些類型

這篇“javascript對象分為哪些類型”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“javascript對象分為哪些類型”文章吧。

成都創(chuàng)新互聯(lián)是一家集網站建設,濟水街道企業(yè)網站建設,濟水街道品牌網站建設,網站定制,濟水街道網站建設報價,網絡營銷,網絡優(yōu)化,濟水街道網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。

javascript的兩類對象:1、宿主對象(host Objects),是由JavaScript宿主環(huán)境提供的對象,它們的行為完全由宿主環(huán)境決定;2、內置對象(Built-in Objects),是由JavaScript語言提供的對象。

本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

在javascript中,可以把對象分成兩類宿主對象和內置對象。

  • 宿主對象(host Objects):由 JavaScript 宿主環(huán)境提供的對象,它們的行為完全由宿主環(huán)境決定。

  • 內置對象(Built-in Objects):由 JavaScript 語言提供的對象

    • 固有對象(Intrinsic Objects ):由標準規(guī)定,隨著 JavaScript 運行時創(chuàng)建而自動創(chuàng)建的對象實例。

    • 原生對象(Native Objects):可以由用戶通過 Array、RegExp 等內置構造器或者特殊語法創(chuàng)建的對象。

    • 普通對象(Ordinary Objects):由{}語法、Object 構造器或者 class 關鍵字定義類創(chuàng)建的對象,它能夠被原型繼承。

宿主對象

JavaScript 宿主對象千奇百怪,但是前端最熟悉的無疑是瀏覽器環(huán)境中的宿主了。在瀏覽器環(huán)境中,我們都知道全局對象是 window,window 上又有很多屬性,如 document。實際上,這個全局對象 window 上的屬性,一部分來自 JavaScript 語言,一部分來自瀏覽器環(huán)境。JavaScript 標準中規(guī)定了全局對象屬性,W3C 的各種標準中規(guī)定了 Window 對象的其它屬性。宿主對象也分為固有的和用戶可創(chuàng)建的兩種,比如 document.createElement 就可以創(chuàng)建一些 DOM 對象。宿主也會提供一些構造器,比如我們可以使用 new Image 來創(chuàng)建 img 元素,

內置對象·固有對象

固有對象是由標準規(guī)定,隨著 JavaScript 運行時創(chuàng)建而自動創(chuàng)建的對象實例。固有對象在任何 JavaScript 代碼執(zhí)行前就已經被創(chuàng)建出來了,它們通常扮演者類似基礎庫的角色。我們前面提到的“類”其實就是固有對象的一種。ECMA 標準為我們提供了一份固有對象表,里面含有 150+ 個固有對象。

內置對象·原生對象

我們把 JavaScript 中,能夠通過語言本身的構造器創(chuàng)建的對象稱作原生對象。在 JavaScript 標準中,提供了 30 多個構造器。按照我的理解,按照不同應用場景,我把原生對象分成了以下幾個種類。

javascript對象分為哪些類型
通過這些構造器,我們可以用 new 運算創(chuàng)建新的對象,所以我們把這些對象稱作原生對象。幾乎所有這些構造器的能力都是無法用純 JavaScript 代碼實現(xiàn)的,它們也無法用 class/extend 語法來繼承。這些構造器創(chuàng)建的對象多數(shù)使用了私有字段, 例如:

Error: [[ErrorData]]
Boolean: [[BooleanData]]
Number: [[NumberData]]
Date: [[DateValue]]
RegExp: [[RegExpMatcher]]
Symbol: [[SymbolData]]
Map: [[MapData]]

這些字段使得原型繼承方法無法正常工作,所以,我們可以認為,所有這些原生對象都是為了特定能力或者性能,而設計出來的“特權對象”。

用對象來模擬函數(shù)與構造器:函數(shù)對象與構造器對象

我在前面介紹了對象的一般分類,在 JavaScript 中,還有一個看待對象的不同視角,這就是用對象來模擬函數(shù)和構造器。事實上,JavaScript 為這一類對象預留了私有字段機制,并規(guī)定了抽象的函數(shù)對象與構造器對象的概念。

函數(shù)對象的定義是:具有[[call]]私有字段的對象,構造器對象的定義是:具有私有字段[[construct]]的對象。

JavaScript 用對象模擬函數(shù)的設計代替了一般編程語言中的函數(shù),它們可以像其它語言的函數(shù)一樣被調用、傳參。任何宿主只要提供了“具有[[call]]私有字段的對象”,就可以被 JavaScript 函數(shù)調用語法支持。

我們可以這樣說,任何對象只需要實現(xiàn)[[call]],它就是一個函數(shù)對象,可以去作為函數(shù)被調用。而如果它能實現(xiàn)[[construct]],它就是一個構造器對象,可以作為構造器被調用。

對于為 JavaScript 提供運行環(huán)境的程序員來說,只要字段符合,我們在上文中提到的宿主對象和內置對象(如 Symbol 函數(shù))可以模擬函數(shù)和構造器。

當然了,用戶用 function 關鍵字創(chuàng)建的函數(shù)必定同時是函數(shù)和構造器。不過,它們表現(xiàn)出來的行為效果卻并不相同。

對于宿主和內置對象來說,它們實現(xiàn)[[call]](作為函數(shù)被調用)和[[construct]](作為構造器被調用)不總是一致的。

對于用戶使用 function 語法或者 Function 構造器創(chuàng)建的對象來說,[[call]]和[[construct]]行為總是相似的,它們執(zhí)行同一段代碼。我們看一下示例。

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

這樣的規(guī)則造成了個有趣的現(xiàn)象,如果我們的構造器返回了一個新的對象,那么 new 創(chuàng)建的新對象就變成了一個構造函數(shù)之外完全無法訪問的對象,這一定程度上可以實現(xiàn)“私有”。

function cls(){
    this.a = 100;
    return {
        getValue:() => this.a
    }
}
var o = new cls;
o.getValue(); //100
//a在外面永遠無法訪問到

特殊行為的對象

除了上面介紹的對象之外,在固有對象和原生對象中,有一些對象的行為跟正常對象有很大區(qū)別。

它們常見的下標運算(就是使用中括號或者點來做屬性訪問)或者設置原型跟普通對象不同,這里我簡單總結一下。

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

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

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

  • Arguments:arguments 的非負整數(shù)型下標屬性跟對應的變量聯(lián)動。

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

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

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

以上就是關于“javascript對象分為哪些類型”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網站欄目:javascript對象分為哪些類型
鏈接分享:http://weahome.cn/article/pcioph.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部