亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

對(duì)象管理器(defineProperty)學(xué)習(xí)筆記

mist14 / 2675人閱讀

摘要:通過(guò)設(shè)置我們可以將一些屬性鎖定,來(lái)防止別人的修改,這是一種防御編程形式,就像語(yǔ)言的內(nèi)置對(duì)象一樣不過(guò)的內(nèi)置對(duì)象都可以被隨意更改??梢允褂脕?lái)判斷某一個(gè)屬性是否可以枚舉。

對(duì)象管理器(defineProperty)

在 JavaScript 里面聲明一個(gè)變量,通常我們有三種方式可以實(shí)現(xiàn):

    let person = {} // 對(duì)象字面量
    let cat = new Object() // new 運(yùn)算符
    let dog = Object.create(null) // create 函數(shù)

我們可以簡(jiǎn)單的將 key 值和 value 值賦進(jìn)去,但在 ES5 中 JavaScript 提供了一個(gè)對(duì)象管理器的方法給我們,讓我們可以很精細(xì)的對(duì)每一個(gè)屬性定制它們的行為,我們分別可以為屬性設(shè)置:

可配置特性(configurable)

可枚舉屬性(enumerable)

可以寫特性(writable)

值(value)

設(shè)置 getter 方法(get)

設(shè)置 setter 方法(set)

首先讓我們看看如何使用Object.defineProperty來(lái)定制屬性吧:

  let person = {}

  Object.defineProperty(person, "name", {
  configurable: true,
  enumerable: true,
  writeable: true,
  value: "_我已經(jīng)從中二畢業(yè)了"
  })

  Object.defineProperty(person, "age", {
  configurable: true,
  enumerable: true,
  writeable: true,
  value: 18
  })

  console.log(person.name) // _我已經(jīng)從中二畢業(yè)了
  console.log(person.age) // 18

通過(guò)上面的代碼可以看出 Object.defineProperty 這個(gè)函數(shù)能夠接受三個(gè)參數(shù):

obj:需要定義屬性的對(duì)象

prop:需被定義或修改的屬性名

descriptor:需被定義或修改的屬性的描述符

語(yǔ)法

Object.defineProperty(obj, prop, descriptor)

可配置特性(configurable)

當(dāng) configurable 這個(gè)屬性為 true 的時(shí)候表示這個(gè)屬性可以從父對(duì)象中刪除。當(dāng) configurable 設(shè)置為 false 的時(shí)候就會(huì)鎖定這個(gè)屬性,無(wú)法被修改。通過(guò)設(shè)置 configurable 我們可以將一些屬性鎖定,來(lái)防止別人的修改,這是一種防御編程形式,就像語(yǔ)言的內(nèi)置對(duì)象一樣(不過(guò) JavaScript 的內(nèi)置對(duì)象都可以被隨意更改)。

  let person = {}

  Object.defineProperty(person, "name", {
  configurable: false,
  value: "_我已經(jīng)從中二畢業(yè)了"
  })

  Object.defineProperty(person, "age", {
  configurable: true,
  value: 18
  })

  delete person.name
  console.log(person.name) // _我已經(jīng)從中二畢業(yè)了

  delete person.age
  console.log(person.age) // undefined

  person.name = "John"
  console.log(person.name) // _我已經(jīng)從中二畢業(yè)了

  person.age = 19
  console.log(person.age) // 19
可枚舉屬性(enumerable)

一般來(lái)說(shuō)我們會(huì)通過(guò)for in操作來(lái)遍歷可以枚舉的屬性。當(dāng)然我們也可以設(shè)置屬性為不可枚舉,這些屬性就不能夠被枚舉了,從而防止遍歷查找到這個(gè)屬性??梢允褂?propertyIsEnumerable 來(lái)判斷某一個(gè)屬性是否可以枚舉。

  let person = {}

  Object.defineProperty(person, "name", {
    enumerable: true,
    value: "_我已經(jīng)從中二畢業(yè)了"
  })

  Object.defineProperty(person, "age", {
    enumerable: false,
    value: 18
  })
    
  // 只輸出了 name    
  for (var key in person) {
    console.log(key)
  }

  console.log(Object.keys(person)) // ["name"]
  console.log(Object.getOwnPropertyNames(person)) // ["name", "age"]
  console.log(person.propertyIsEnumerable("name")) // true
  console.log(person.propertyIsEnumerable("age")) // false
  console.log(person.age) // 18
可以寫特性(writable)

當(dāng) writable 為 true 的時(shí)候,與屬性相關(guān)聯(lián)的值是可以更改的。否則,值就不能改變。

  let person = {}
  let person2 = person

  Object.defineProperty(person, "name", {
    writable: false,
    value: "_我已經(jīng)從中二畢業(yè)了"
  })

  Object.defineProperty(person, "age", {
    writable: true,
    value: 18
  })

  person.name = "John"
  console.log(person.name) // _我已經(jīng)從中二畢業(yè)了
  console.log(person2.name) // _我已經(jīng)從中二畢業(yè)了

  person.age = 19
  console.log(person.age) // 19
  console.log(person.age) // 19

  person2.name = "John"
  console.log(person.name) // _我已經(jīng)從中二畢業(yè)了
  console.log(person2.name) // _我已經(jīng)從中二畢業(yè)了

  person2.age = 20
  console.log(person.age) // 20
  console.log(person.age) // 20
相關(guān)鏈接

Object.defineProperty()

Object.keys()

Object.getOwnPropertyNames()

Object.prototype.propertyIsEnumerable()

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/79332.html

相關(guān)文章

  • JS學(xué)習(xí)筆記(第6章)(面向對(duì)象的程序設(shè)計(jì)之理解對(duì)象

    摘要:其中,描述符對(duì)象的屬性必須是和。吧設(shè)置為,表示不能從對(duì)象中刪除屬性。這個(gè)方法接收兩個(gè)對(duì)象參數(shù)要添加和修改其屬性值的對(duì)象,第二個(gè)是與第一個(gè)對(duì)象中要添加和修改的屬性值一一對(duì)應(yīng)。 理解對(duì)象 1、創(chuàng)建自定義對(duì)象的兩種方法: (1)創(chuàng)建一個(gè)Object實(shí)例,然后再為它添加屬性和方法。 var person = new Object(); person.name = Nicholas; ...

    FingerLiu 評(píng)論0 收藏0
  • vue數(shù)據(jù)雙向綁定學(xué)習(xí)筆記

    摘要:訂閱者的實(shí)現(xiàn)如下將自己添加到訂閱器的操作緩存自己強(qiáng)行執(zhí)行監(jiān)聽器里的函數(shù)釋放自己到此為止,簡(jiǎn)單版的設(shè)計(jì)完畢,這時(shí)候我們需要將和關(guān)聯(lián)起來(lái),就可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的雙向數(shù)據(jù)綁定了。同樣使用數(shù)據(jù)劫持。。 什么是雙向綁定 簡(jiǎn)單說(shuō)就是在數(shù)據(jù)和UI之間建立雙向的通信通道,當(dāng)用戶通過(guò)Function改變了數(shù)據(jù),那么這個(gè)改變也會(huì)立即反映到UI上;或者說(shuō)用戶通過(guò)UI的操作也會(huì)隨之引起對(duì)應(yīng)的數(shù)據(jù)變動(dòng)。Vue是如...

    huashiou 評(píng)論0 收藏0
  • JavaScript Object.defineProperty()學(xué)習(xí)筆記

    摘要:數(shù)據(jù)屬性有個(gè)描述其行為的特性。表示能否通過(guò)刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問(wèn)器屬性。表示能否修改屬性的值。其中,描述符對(duì)象的屬性必須是和。返回值被傳遞給函數(shù)的對(duì)象。 屬性類型 ECMAScript中有兩種屬性:數(shù)據(jù)屬性和訪問(wèn)器屬性。數(shù)據(jù)屬性:數(shù)據(jù)屬性包含一個(gè)數(shù)據(jù)值的位置。在這個(gè)位置可以讀取和寫入值。數(shù)據(jù)屬性有4個(gè)描述其行為的特性。 [[Configu...

    lushan 評(píng)論0 收藏0
  • 《你不知道的javascript》筆記_對(duì)象&原型

    摘要:上一篇你不知道的筆記寫在前面這是年第一篇博客,回顧去年年初列的學(xué)習(xí)清單,發(fā)現(xiàn)僅有部分完成了。當(dāng)然,這并不影響年是向上的一年在新的城市穩(wěn)定連續(xù)堅(jiān)持健身三個(gè)月早睡早起游戲時(shí)間大大縮減,學(xué)會(huì)生活。 上一篇:《你不知道的javascript》筆記_this 寫在前面 這是2019年第一篇博客,回顧去年年初列的學(xué)習(xí)清單,發(fā)現(xiàn)僅有部分完成了。當(dāng)然,這并不影響2018年是向上的一年:在新的城市穩(wěn)定、...

    seasonley 評(píng)論0 收藏0
  • vue 雙向數(shù)據(jù)綁定的實(shí)現(xiàn)學(xué)習(xí)(一)

    摘要:雙向數(shù)據(jù)綁定簡(jiǎn)言之?dāng)?shù)據(jù)動(dòng)頁(yè)面動(dòng),頁(yè)面動(dòng),數(shù)據(jù)動(dòng)典型的應(yīng)用就是在做表單時(shí)候,輸入框的內(nèi)容改動(dòng)后,跟該輸入框的的值改動(dòng)。看官網(wǎng)上的這個(gè)的演示案例雙向數(shù)據(jù)綁定的好處要說(shuō)出這個(gè)好處的時(shí)候,也只有在實(shí)際場(chǎng)景中才能對(duì)應(yīng)的顯示出來(lái)。 前言:本系列學(xué)習(xí)筆記從以下幾個(gè)點(diǎn)展開 什么是雙向數(shù)據(jù)綁定 雙向數(shù)據(jù)綁定的好處 怎么實(shí)現(xiàn)雙向數(shù)據(jù)綁定 實(shí)現(xiàn)雙向數(shù)據(jù)數(shù)據(jù)綁定需要哪些知識(shí)點(diǎn) 數(shù)據(jù)劫持 發(fā)布訂閱模式 ...

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

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

0條評(píng)論

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