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

資訊專欄INFORMATION COLUMN

Object api

andong777 / 1611人閱讀

摘要:不可與同時(shí)使用,會(huì)由屬性的寫入觸發(fā)。權(quán)限僅可對(duì)為的屬性進(jìn)行賦值。作用完全鎖死,不能做任何修改。需要注意的是,上述三個(gè)都是對(duì)原有對(duì)象的操作,并不會(huì)返回一個(gè)新的對(duì)象。可以說這些屬性描述符是針對(duì)對(duì)象的屬性做出的限制或者保護(hù)。

前言

昨天談到了這些問題,發(fā)現(xiàn)認(rèn)識(shí)比較片面。決定仔細(xì)看看并總結(jié)一下。
研究Object的部分ES5 API。可能會(huì)提到部分ES6內(nèi)容。

Object

Object MDN API

屬性描述符

即描述對(duì)象屬性特性的描述符

四個(gè)特性描述符

value

writable 只讀性

enumerable 可枚舉性

configurable 可配置性(屬性的刪除與重新配置)

value默認(rèn)為undefined
在使用Object.create()Object.defineProperty時(shí)writableenumerableconfigurable默認(rèn)均為false

兩個(gè)訪問器

get 不可與value同時(shí)使用,會(huì)由屬性的讀取觸發(fā)。

set 不可與writable同時(shí)使用,會(huì)由屬性的寫入觸發(fā)。

將會(huì)在其他的api中介紹屬性描述符的用法

對(duì)象的創(chuàng)建與屬性修改 Object.create()

Object.create(proto, [ propertiesObject ])
此api的作用是以proto為原型,以propertiesObject自有屬性(不包含propertiesObject的原型上的屬性,包含所有不可枚舉屬性)為屬性創(chuàng)建一個(gè)新的對(duì)象。

// 非嚴(yán)格模式下運(yùn)行,嚴(yán)格模式下會(huì)拋出異常
const proto = {
  saySize () {
    console.log(this.size)
  }
}
const propertiesObject = {
  size: {
    enumerable: false,
    configurable: false,
    value: "large"
  },
  color: {
    writable: true,
    enumerable: true,
    configurable: true,
    value: "red"
 }
}
let newObj = Object.create(proto, propertiesObject)

// 原型
newObj.saySize()
// "large"

// writable
newObj.size = "small"
newObj.color = "green"
console.log(newObj.size, newObj.color)
// "large,green"

// enumerbale
for(key in newObj){
  console.log(key)
}
// "color"
// "saySize"
delete newObj.size
// false
delete newObj.color
// true

上述代碼中的proto使用Fun.prototype即可實(shí)現(xiàn)原型鏈的繼承。

那么要怎樣才能枚舉出enumerable:false的屬性呢?

Object.defineProperty()

Object.defineProperty(obj, prop, descriptor)
此api允許修改或向obj添加屬性
obj為目標(biāo)對(duì)象,prop為要修改或添加的屬性,descriptor為屬性描述符

let tempObj1 = {}
Object.defineProperty(tempObj, "name", {
  value: "temp",
  writable: false,
  enumerable: true,
  configurable: false
})
console.log(tempObj)
// Object {name: "temp"}

// 拋出異常
Object.defineProperty(tempObj, "name", {
  value: temp,
  writable: true
})

對(duì)于configurable: false的屬性禁止修改屬性描述符,會(huì)拋出異常。

let tempObj2 = {_name: "temp2"}
Object.defineProperty(tempObj2, "name", {
  get () {
    return `名字為${this._name}`
  },
  set (value) {
    console.log(`新名字為${value}`)
  }
})
console.log(tempObj2.name)
// "名字為temp2"
tempObj2.name = "temp2.0"
// "新名字為temp2.0"

可以觀察到 讀屬性值與 寫屬性值分別觸發(fā)了getset屬性訪問器。
代碼中所用到的"`名字為${this._name}`" 為es6模板字符串,實(shí)現(xiàn)拼串

Object.defineProperties()

Object.defineProperties(obj, props)
此api方便了屬性的批量修改,第二個(gè)參數(shù)與Object.create()的第二個(gè)參數(shù)結(jié)構(gòu)相同。

let tempObj3 = {name:"temp"}
Object.defineProperties(tempObj3, {
  name: {
    value: "newTemp",
    writable: true
  },
  color: {
    value: "red",
    writable: true,
    enumerable: true
  }
})
console.log(tempObj3)
// Object {name: "newTemp", color: "red"}
對(duì)象屬性的檢測(cè)與檢索

我們也看到了對(duì)于enumerable:false的屬性是不可枚舉的。甚至ES6中還有“隱蔽性”更高的Symbol()可以作為屬性鍵。那么怎么才能正確的檢測(cè)與獲取對(duì)象的屬性呢?

我們先創(chuàng)建一個(gè)對(duì)象用于實(shí)驗(yàn)后續(xù)的所有方法。
原型和自身都各包含三種屬性:enumerable: false,enumerable: true,Symbol()

const proto = Object.create(null, {
  supTrue: {
    value: "value1",
  enumerable: true
},
supFalse: {
  value: "value2",
    enumerable: false
  }
})
proto[Symbol("supSymbol")] = "supSymbol"
console.log(proto)
// {
//  supTrue: "value",
//  Symbol(supSymbol): "supSymbol",
//  supFalse: "value2"
// }
let obj = Object.create(proto, {
  ownTrue: {
    value: "value1",
    enumerable: true
},
ownFalse: {
    value: "value2",
    enumerable: false
  }
})
obj[Symbol("ownSymbol")] = "ownSymbol"
// ok,obj可用
for-in
for (const key in obj) {
    console.log(key)
}
// subTrue, ownTrue

可以看到for in枚舉了包括原型鏈在內(nèi)的所有可枚舉屬性

Object.keys()
Object.keys(obj)
// ["ownTrue"]

可以看到返回了一個(gè)只包含自身可枚舉屬性鍵的數(shù)組。

Object.getOwnPropertyNames()
Object.getOwnPropertyNames(obj)
// ["ownTrue", "ownFalse"]

可以看到返回了一個(gè)包含自身所有非symbol的屬性鍵的數(shù)組。
由此也可以看到symbol類型的屬性的“隱蔽性”

Object.getOwnPropertySymbols()

針對(duì) 獲取symbol可使用此方法。

Reflect.ownKeys()

雖然這個(gè)不是Object的方法
但是可以用來獲取自身所有屬性鍵

Reflect.ownKeys(obj)
// ["ownTrue", "ownFalse", Symbol(ownSymbol)]
把對(duì)象關(guān)起來

按照權(quán)限從大到小排列

Object.preventExtensions()

作用:將對(duì)象變的不可擴(kuò)展,不可添加新的屬性。

Object.seal()

作用:將對(duì)象“密封”,不可添加新屬性,屬性的configurable置為falsewritabletrue的屬性仍然可以被重新賦值。
權(quán)限:僅可對(duì)writabletrue的屬性進(jìn)行賦值。

Object.freeze()

作用:完全“鎖死”,不能做任何修改。
權(quán)限:0。

需要注意的是,上述三個(gè)api都是對(duì)原有對(duì)象的操作,并不會(huì)返回一個(gè)新的對(duì)象。

let obj = {}
Object.preventExtensions(obj) === obj // true
Object.seal(obj) === obj // true
Object.freeze(obj) === obj // true

可以說writable,configurable這些屬性描述符是針對(duì)對(duì)象的屬性做出的限制或者保護(hù)。
那么Object.seal(),Object.preventExtensions(),Object.freeze()就是對(duì)對(duì)象本身做出限制或者保護(hù)。
同時(shí)我們也知道在ES6中使用const可以聲明一個(gè)"常量",但是要注意的是const確保的只是指針的不可更改。比如:

const obj = {key: "value1"}
obj.key = "value2" // 可完成
obj = {key2: "value2"} // 更改指針,拋出異常

針對(duì)對(duì)象,此時(shí)就可以使用上述三個(gè)把對(duì)象關(guān)起來的api。

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

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

相關(guān)文章

  • 使用機(jī)器學(xué)習(xí)預(yù)測(cè)天氣(第一部分)

    摘要:概述本章是使用機(jī)器學(xué)習(xí)預(yù)測(cè)天氣系列教程的第一部分,使用和機(jī)器學(xué)習(xí)來構(gòu)建模型,根據(jù)從收集的數(shù)據(jù)來預(yù)測(cè)天氣溫度。數(shù)據(jù)類型是機(jī)器學(xué)習(xí)領(lǐng)域經(jīng)常會(huì)用到的數(shù)據(jù)結(jié)構(gòu)。 概述 ??本章是使用機(jī)器學(xué)習(xí)預(yù)測(cè)天氣系列教程的第一部分,使用Python和機(jī)器學(xué)習(xí)來構(gòu)建模型,根據(jù)從Weather Underground收集的數(shù)據(jù)來預(yù)測(cè)天氣溫度。該教程將由三個(gè)不同的部分組成,涵蓋的主題是: 數(shù)據(jù)收集和處理(本文)...

    liukai90 評(píng)論0 收藏0
  • JavaScript 對(duì)象所有API解析

    摘要:創(chuàng)建對(duì)象的兩種方式推薦該構(gòu)造器可以接受任何類型的參數(shù),并且會(huì)自動(dòng)識(shí)別參數(shù)的類型,并選擇更合適的構(gòu)造器來完成相關(guān)操作。比如二的成員該屬性指向用來構(gòu)造該函數(shù)對(duì)象的構(gòu)造器,在這里為該方法返回的是一個(gè)用于描述目標(biāo)對(duì)象的字符串。 之前看到【深度長(zhǎng)文】JavaScript數(shù)組所有API全解密和JavaScript字符串所有API全解密這兩篇高質(zhì)量的文章。發(fā)現(xiàn)沒寫對(duì)象API解析(估計(jì)是博主覺得簡(jiǎn)單,...

    SmallBoyO 評(píng)論0 收藏0
  • 360°產(chǎn)品展示

    摘要:是一款可以對(duì)產(chǎn)品圖片進(jìn)行度全方位旋轉(zhuǎn)展示的插件。動(dòng)畫幀通過切換的速度,默認(rèn)值為毫秒。動(dòng)畫幀改編之后的回調(diào)函數(shù)以當(dāng)前幀和總幀數(shù)為參數(shù)。返回對(duì)象的總的動(dòng)畫幀數(shù)。顯示對(duì)象的元素節(jié)點(diǎn)。 Circlr是一款可以對(duì)產(chǎn)品圖片進(jìn)行360度全方位旋轉(zhuǎn)展示的插件。Circlr通過按一定角度規(guī)律拍攝的產(chǎn)品圖片,制作出可以使用鼠標(biāo)拖動(dòng)、鼠標(biāo)滾輪和移動(dòng)觸摸來進(jìn)行圖片逐幀旋轉(zhuǎn)的效果。比先前的Rollerblade...

    liukai90 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

andong777

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<