JS學習之Object

前言

上篇文章介紹了JS的對象,本文將介紹Object這個基類,主要介紹其屬性和方法(其實這些在MDN裏都有^_^,點擊這裏能夠直通MDN)。好了廢話很少說了,直接開始。文中的Object多爲構造函數Object數組

原型對象

  • Object.prototype
    prototype屬性爲函數的專屬屬性,表示函數的原型對象。該屬性表示Object對象的原型對象,此處的Objcet爲構造函數Object而不是對象實例。下圖能夠證實。函數

clipboard.png

  • Object.prototype.__proto__
    該屬性爲訪問器屬性,即爲有get和set函數的屬性,能夠直接賦值。如有對象實例obj則可直接訪問該屬性obj.__proto__spa

  • Object.getPrototypeOf(obj)
    該方法得到對象實例obj的原型對象。得到的對象與對象的__proto__屬性的值相同。prototype

  • Object.setPrototypeOf(obj, prototype)
    該方法是將prototype對象設爲obj對象的原型對象。該方法是ES6的標準。code

  • prototypeObject.isPrototypeOf(obj)
    該方法判斷prototypeObject對象是否在obj對象的原型鏈上。對象

關於各類數據類型的prototype屬性的展現
clipboard.png繼承

clipboard.png

對象的構造器函數

  • Object.prototype.constructor
    該屬性指向建立該對象原型的構造函數。其返回爲一個具體的函數而不是引用或對象。ip

對象的屬性

  • Object.defineProperty(obj,prop,desc)Object.defineProperties(obj, {prop1:desc1, prop2:desc2})
    上面兩個方法都是給對象obj添加或修改自身屬性,前者只能操做一個屬性,或者能夠操做多個屬性。其參數中prop爲屬性名,desc爲屬性描述符。兩個方法都返回改變後的對象obj。原型鏈

  • Object.getOwnPropertyNames(obj)
    該方法得到對象obj的全部自身屬性的屬性名組成的數組(包括不可枚舉屬性)。數組中元素的排列順序未知(以我本身有限的幾個例子看,應該是按定義的前後順序排列)。字符串

  • Object.getOwnPropertyDescriptor(obj, prop)Object.getOwnPropertyDescriptors(obj)
    兩個方法都是獲取對象obj的自身屬性的屬性描述符,前者只是取得某個屬性的描述符,後者獲取整個對象的全部自身屬性的描述符。

  • Object.entries(obj)
    該方法返回對象自身屬性中全部可枚舉的屬性的鍵值對(屬性名:值)組成的數組。

  • Object.keys(obj)
    該方法與上面的方法類似,也是遍歷對象中的可枚舉屬性,只是此方法返回的是對象中可枚舉的自身屬性的屬性名組成的數組。

  • Object.getOwnPropertySymblos(obj)
    該方法會返回一個數組,該數組包含了指定對象自身的(非繼承的)全部 symbol 屬性鍵。(此方法爲ES6規範)

  • Object.prototype.propertyIsEnumerable(prop)(obj.propertyIsEnumerable(prop))
    判斷屬性prop是不是對象obj的可枚舉的自身屬性。

  • Object.prototype.hadsOwnProperty(prop)(obj.hadsOwnProperty(prop))
    判斷obj對象是否含有prop自身屬性。

對象擴展及新建

  • Object.assign(target, ...sources)
    該方法能夠把任意多個的源對象自身的可枚舉屬性拷貝給目標對象,而後返回目標對象。

  • Object.create(prototype, [ propertiesObject ])
    該方法建立一個擁有指定原型和若干個指定屬性的對象。

對象狀態

  • Object.preventExtensions(obj)、'Object.isExtensible(obj)'
    對對象的可擴展狀態設置和判斷,對象默承認擴展。前者是讓obj對象變得不可擴展。後者是判斷obj對象是否可以擴展。

  • Object.seal(obj)`Object.isSealed(obj)`
    對對象的密封狀態的設置和判斷。前者讓obj對象密封,後者判斷obj對象是否被密封。密封對象是指那些不能添加新的屬性,不能刪除已有屬性,以及不能修改已有屬性的可枚舉性、可配置性、可寫性,但可能能夠修改已有屬性的值的對象。

  • Object.freeze(obj)Object.isFrozen(obj)
    對對象的凍結狀態的設置和判斷,前者讓凍結obj對象,後者判斷對象obj是否被凍結。凍結指的是不能向這個對象添加新的屬性,不能修改其已有屬性的值,不能刪除已有屬性,以及不能修改該對象已有屬性的可枚舉性、可配置性、可寫性。也就是說,這個對象永遠是不可變的。該方法返回被凍結的對象。

其餘

  • Object.is(value1, value2)
    該方法爲同值判斷,即判斷value1value2是否爲同一個值,與===號不一樣的是,該方法會將兩個NaN判斷爲同一個值,而+0-0爲不一樣的值。

  • Object.prototype.toLocalString()Object.prototype.toString()
    返回一個表示該對象的字符串。toLocaleString()方法主要用於被本地化相關對象覆蓋。覆蓋了該方法的對象有ArrayNumberDatetoString()方法能夠用來檢測對象類型。其用法爲Object.prototype.toString.call(obj),其返回值的格式爲[object ObjectName]

  • Object.prototype.valueOf()
    該方法返回對象的原始值。這個方法用的很少,大多數狀況下JS會自動調用此函數,另一些就是其餘對象重寫了此函數的狀況。

結語

本人初學JS,內容基本上從MDN上搬過來的本身的理解不是不少,再加上初中做文湊不齊600字的語文水平(-_-|)……本文內容若有錯漏,望請指正,不勝感激!

相關文章
相關標籤/搜索