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