摘要:數(shù)據(jù)描述符是一個(gè)具有值的屬性,該值可能是可寫的,也可能不是可寫的。描述符必須是這兩種形式之一不能同時(shí)是兩者。注意點(diǎn)運(yùn)算符和為對(duì)象的屬性賦值時(shí),數(shù)據(jù)描述符中的屬性默認(rèn)值是不同的,如下例所示。
一、概念語法
Object.defineProperty(obj,prop,descriptor) 參數(shù): 1.obj:要在其上定義屬性的對(duì)象 2.key:要定義或者修改的屬性 3.descriptor:將被定義或者修改的屬性描述符 返回值: obj:傳遞給函數(shù)的對(duì)象 作用: 直接在一個(gè)對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)對(duì)象的現(xiàn)有屬性, 并返回這個(gè)對(duì)象。 默認(rèn)情況下,使用Object.defineProperty()添加的屬性值是不可變的。
var obj = {},person="xiaoming" Object.defineProperty(obj,"name",{ get:function(){ // 獲取屬性值 return person }, set:function(value){ //設(shè)置屬性值 person = value } }) console.log(obj); //{} obj的屬性值 顏色是虛的,但是可以更改 console.log(obj.name); //xiaoming //設(shè)置屬性值 obj.name = "xiaohong"; console.log(obj) //{} console.log(obj.name); //xiaohong
總結(jié):直接設(shè)置存取器屬性是無法直接在對(duì)象中體現(xiàn)出來console.log(obj); //{},需要執(zhí)行獲取方法
二、屬性描述符對(duì)象里目前存在的屬性描述符有兩種主要形式:數(shù)據(jù)描述符和存取描述符。
數(shù)據(jù)描述符是一個(gè)具有值的屬性,該值可能是可寫的,也可能不是可寫的。
訪問器描述符是由getter-setter函數(shù)對(duì)描述的屬性。
描述符必須是這兩種形式之一;不能同時(shí)是兩者。
注意1:點(diǎn)運(yùn)算符和Object.defineProperty()為對(duì)象的屬性賦值時(shí),數(shù)據(jù)描述符中的屬性默認(rèn)值是不同的,如下例所示。
var o = {}; o.a = 1; // 等同于 : Object.defineProperty(o, "a", { value : 1, writable : true, configurable : true, enumerable : true }); // 另一方面, Object.defineProperty(o, "a", { value : 1 }); // 等同于 : Object.defineProperty(o, "a", { value : 1, writable : false, configurable : false, enumerable : false }); 因此:默認(rèn)情況下,使用Object.defineProperty()添加的屬性值是不可變的。 因?yàn)槟J(rèn)writalbe:false,不可寫
示例
Object.defineProperty(obj,"name",{ value:"xiaoming" }); console.log( obj.name ); //xiaoming console.log(obj) //{name:"xiaoming"} //此時(shí)修改屬性值不可變 obj.name = ""; console.log(obj.name); //xiaoming 仍然是,值不變
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/107414.html
摘要:擱置了幾天我還是決定再次重寫下邊我們來具體聊聊先從開始說起有個(gè)定義屬性的功能,應(yīng)該沒幾個(gè)人用,因?yàn)橄鄬?duì)于這種方式簡直不能再難用。 擱置了幾天我還是決定再次重寫! 下邊我們來具體聊聊先從defineProperty開始說起 defineproperty //defineproperty 有個(gè)定義object屬性的功能,應(yīng)該沒幾個(gè)人用,因?yàn)橄鄬?duì)于obj.a = 1這種方式簡直不能再難用。 ...
摘要:語法將要被添加屬性或修改屬性的對(duì)象該對(duì)象的一個(gè)或多個(gè)鍵值對(duì)定義了將要為對(duì)象添加或修改的屬性的具體配置張三張三功能該方法返回指定對(duì)象上一個(gè)自有屬性對(duì)應(yīng)的屬性描述符。 文章同步到github ECMAS-262第5版在定義只有內(nèi)部采用的特性時(shí),提供了描述了屬性特征的幾種屬性。ECMAScript對(duì)象中目前存在的屬性描述符主要有兩種,數(shù)據(jù)描述符(數(shù)據(jù)屬性)和存取描述符(訪問器屬性),數(shù)據(jù)描述...
摘要:對(duì)象用戶看到的對(duì)象用戶看到的是這個(gè)對(duì)象即是實(shí)際使用的對(duì)象實(shí)際使用的對(duì)象復(fù)制更新相應(yīng)的代碼實(shí)現(xiàn)對(duì)象代理響應(yīng)式原理前提官網(wǎng)說過,限于現(xiàn)代瀏覽器限制,無法監(jiān)測通過這種方式添加的屬性,所以,他的響應(yīng)式是建立在實(shí)例化對(duì)象的時(shí)候,預(yù)定義屬性的基礎(chǔ)上的。 1. Vue 對(duì)象 1.1 用戶看到的對(duì)象 var app = new Vue({ el: #app , /* * 用...
摘要:數(shù)據(jù)劫持?jǐn)?shù)據(jù)劫持即使用實(shí)現(xiàn)了的雙向綁定。不輸出內(nèi)容數(shù)據(jù)代理即代理的意思。的攔截處理器除了外還支持多種攔截方式,具體請(qǐng)查閱官方文檔嵌套查詢。實(shí)際上也是不支持嵌套查詢的。 數(shù)據(jù)劫持 數(shù)據(jù)劫持即使用Object.defineProperty()實(shí)現(xiàn)了vue的雙向綁定。先來看看它是如何實(shí)現(xiàn)的 let obj = {}, txt = Object.defineProperty(obj,txt,...
摘要:兼容性更詳細(xì)的可以看一下實(shí)現(xiàn)思路系列的雙向綁定,關(guān)鍵步驟實(shí)現(xiàn)數(shù)據(jù)監(jiān)聽器,用重寫數(shù)據(jù)的,值更新就在中通知訂閱者更新數(shù)據(jù)。 showImg(https://segmentfault.com/img/remote/1460000015375220?w=640&h=426); 前言 現(xiàn)在的前端面試不管你用的什么框架,總會(huì)問你這個(gè)框架的雙向綁定機(jī)制,有的甚至要求你現(xiàn)場實(shí)現(xiàn)一個(gè)雙向綁定出來,那對(duì)于...
閱讀 1085·2021-10-14 09:42
閱讀 1381·2021-09-22 15:11
閱讀 3293·2019-08-30 15:56
閱讀 1251·2019-08-30 15:55
閱讀 3620·2019-08-30 15:55
閱讀 896·2019-08-30 15:44
閱讀 2032·2019-08-29 17:17
閱讀 2079·2019-08-29 15:37