中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

ECMAScript 5中的屬性描述符詳解
來源:易賢網 閱讀:1272 次 日期:2015-03-06 11:41:37
溫馨提示:易賢網小編為您整理了“ECMAScript 5中的屬性描述符詳解”,方便廣大網友查閱!

這篇文章主要介紹了ECMAScript 5中的屬性描述符詳解,本文講解了Object.defineProperty、數據描述符、存取描述符、獲取屬性描述符、對象控制等內容,需要的朋友可以參考下

屬性描述符是ES5中新增的概念,其作用是給對象的屬性增加更多的控制。

Object.defineProperty

要研究屬性描述符,首先要談談 Object.defineProperty 方法。這個方法的作用是給對象定義新屬性或修改已存在的屬性。其原型如下:

代碼如下:

Object.defineProperty(obj, prop, descriptor)

使用示例:

代碼如下:

var obj = { };

Object.defineProperty(obj, 'attr', { value: 1 });

上面一段代碼給obj對象增加了一個名為attr的屬性,值為1。相當于:

代碼如下:

var obj = { };

obj.attr = 1;

相比起來,Object.defineProperty 的寫法看似更為復雜。但是,它最大的奧秘在于其第三個參數。

數據描述符

假設我們希望attr是一個只讀屬性,就可以加上 writable 數據描述符:

代碼如下:

var obj = { };

Object.defineProperty(obj, 'attr', {

value: 1,

writable: false

});

console.log(obj.attr);

obj.attr = 2; // fail

console.log(obj.attr);

執行以上程序可以發現,兩次打印出來的attr的值都是1,也就是說對屬性的寫入失敗。然而,這樣的結果會有點莫名其妙,因為賦值語句的執行沒有異常,卻失敗了,試想如果在大片的代碼中出現這樣的問題,就很難排查出來。事實上,只要以嚴格模式運行代碼,就會產生異常:

復制代碼 代碼如下:

'use strict'; // 進入嚴格模式

var obj = { };

Object.defineProperty(obj, 'attr', {

value: 1,

writable: false

});

obj.attr = 2; // throw exception

下面再來看看另一個數據描述符 enumerable ,它可以控制屬性是否能被枚舉。如果只是簡單地定義一個屬性,這個屬性是可以在for...in循環中被枚舉出來的:

代碼如下:

var obj = { };

obj.attr = 1;

for (var i in obj) { console.log(obj[i]); }

enumerable 可以將其“藏”起來:

var obj = { };

Object.defineProperty(obj, 'attr', {

value: 1,

enumerable: false

});

for (var i in obj) { console.log(obj[i]); }

執行上面一段代碼,會發現控制臺什么也沒輸出,因為此時attr屬性無法被枚舉了。

講到這里,大家可能有一個疑問,屬性描述符能否被修改?比方說一個只讀屬性是否可以再次定義為可寫?其實這取決于另一個數據描述符 configurable ,它可以控制屬性描述符能否被更改。

代碼如下:

var obj = { };

Object.defineProperty(obj, 'attr', {

value: 1,

writable: false,

configurable: true

});

Object.defineProperty(obj, 'attr', {

writable: true

});

obj.attr = 2;

上面一段代碼先把attr定義為只讀屬性,然后又重新定義為可寫。所以對attr的寫入是成功的。

存取描述符

存取描述符類似面向對象中的get/set訪問器。

代碼如下:

var obj = { };

Object.defineProperty(obj, 'attr', {

set: function(val) { this._attr = Math.max(0, val); },

get: function() { return this._attr; }

});

obj.attr = -1;

console.log(obj.attr); // 0

在上面一段代碼中,對attr的訪問事實上變成了對_attr的訪問,而且在set函數中限制了最小值為0。

獲取屬性描述符

前面所述都是設置屬性描述符,那如何獲取已設置的描述符呢?Object.getOwnPropertyDescriptor 可以完成此項工作。

代碼如下:

var obj = { };

Object.defineProperty(obj, 'attr', {

value: 1,

writable: false,

configurable: true

});

var desc = Object.getOwnPropertyDescriptor(obj, 'attr');

console.dir(desc);

對象控制

前面說的 Object.defineProperty ,其操作的是對象的屬性,而下面說的三個方法則直接操作對象。

Object.preventExtensions 可以使對象無法擁有新的屬性:

代碼如下:

var obj = { };

obj.attr = 1;

Object.preventExtensions(obj);

obj.attr2 = 2; //fail

Object.seal 可以使對象僅剩屬性值可以修改(如果屬性為只讀,則連屬性值都無法修改):

代碼如下:

var obj = { };

obj.attr = 1;

Object.seal(obj);

obj.attr = 1.5;

delete obj.attr; // fail

Object.freeze 可以使對象完全無法被修改:

代碼如下:

var obj = { };

obj.attr = 1;

Object.freeze(obj);

obj.attr = 1.5; // fail

obj.attr2 = 2; //fail

然后大家可能又會問,怎么知道某個對象是否曾經被preventExtensions、seal或者freeze呢?答案就是分別調用 Object.isExtensible 、 Object.isSealed 、 Object.isFrozen ,這三個函數的用法比較簡單,就不再累贅了。

總的來說,通過屬性描述符可以進一步嚴格控制對象,加強程序邏輯的嚴謹性,唯一不足的就是,ES5在IE9里面才基本實現(IE9還不支持嚴格模式),考慮到國內IE8份額還比較高的情況,這套東西目前只能在移動端瀏覽器和Node.js里面用了。

更多信息請查看IT技術專欄

更多信息請查看腳本欄目
易賢網手機網站地址:ECMAScript 5中的屬性描述符詳解
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲国产美女搞黄色| 久久久亚洲综合| 91蝌蚪porny| 成人午夜电影久久影院| 国产又黄又大久久| 国内精品视频一区二区三区八戒| 丝袜脚交一区二区| 日本不卡的三区四区五区| 国模冰冰炮一区二区| 国产精品亚洲一区二区三区妖精 | 波多野结衣在线一区| 国产精品主播直播| 成人黄色大片在线观看| 97se亚洲国产综合自在线| 色偷偷成人一区二区三区91| 91国偷自产一区二区三区观看 | 青青国产91久久久久久| 免费视频最近日韩| 国产老肥熟一区二区三区| 国产成人av网站| 91香蕉视频在线| 777精品伊人久久久久大香线蕉| 日韩三级免费观看| 日本一区二区三区dvd视频在线| 美女看a上一区| 国产不卡视频在线观看| 色婷婷久久综合| 日韩欧美卡一卡二| 国产精品久线在线观看| 亚洲电影你懂得| 狠狠色狠狠色综合日日91app| 丁香五精品蜜臀久久久久99网站 | 91精品国产入口| 国产目拍亚洲精品99久久精品| 亚洲欧美福利一区二区| 奇米色777欧美一区二区| www.性欧美| 欧美一区二区精品| 一区在线播放视频| 日本va欧美va欧美va精品| 成人性生交大片免费看视频在线| 欧美日韩中文国产| 日本一区二区动态图| 日韩电影免费一区| 99视频精品免费视频| 欧美一卡在线观看| 亚洲精品乱码久久久久久久久| 久久aⅴ国产欧美74aaa| 欧美日韩一区国产| 国产精品久久久久久久久免费丝袜| 午夜精彩视频在线观看不卡| 成人av资源在线观看| 日韩欧美一卡二卡| 亚洲午夜免费视频| 91在线播放网址| 国产亚洲欧美激情| 奇米影视一区二区三区小说| 91免费在线看| 国产精品久久久久久久久免费樱桃| 久久超碰97中文字幕| 欧美日韩国产中文| 亚洲愉拍自拍另类高清精品| av亚洲精华国产精华| 久久久久成人黄色影片| 日本亚洲一区二区| 久久综合色婷婷| 亚洲黄一区二区三区| 国产精品亚洲视频| 国产欧美一区二区精品性色 | 国产农村妇女精品| 亚洲一区二区三区四区在线| 成人免费看黄yyy456| 国产精品久久午夜| 国产一区二区视频在线| 久久青草国产手机看片福利盒子 | 久久综合狠狠综合久久激情| 亚洲国产成人tv| 欧美性感一区二区三区| 亚洲免费观看在线视频| 色88888久久久久久影院按摩| 色婷婷亚洲婷婷| 国产精品一区二区91| 最新成人av在线| 91免费看`日韩一区二区| 久久久精品影视| 99视频精品在线| 国产日韩欧美一区二区三区乱码| 国产成人一区二区精品非洲| 欧美一三区三区四区免费在线看| 亚洲va欧美va人人爽午夜| 99精品黄色片免费大全| 日韩精品福利网| 欧美精品一二三| 日韩精品乱码免费| 日韩亚洲欧美一区| 久久精品免费看| 欧美成人精品二区三区99精品| 日韩二区三区在线观看| 粉嫩aⅴ一区二区三区四区五区| 精品国产乱码久久久久久影片| 国产一区二区成人久久免费影院| 久久精品人人做人人爽97| 国产成人精品免费网站| 欧美国产视频在线| 色综合色狠狠综合色| 亚洲图片有声小说| 日韩一区二区三区在线| 韩国成人在线视频| 中文字幕电影一区| 色妹子一区二区| 亚洲成人av中文| 成人精品免费看| 亚洲一区二区欧美日韩| 在线成人午夜影院| 蜜臀av国产精品久久久久 | 亚洲欧美另类图片小说| 色综合久久88色综合天天| 亚洲精品大片www| 欧美中文字幕一区| 国产美女在线精品| 亚洲色图在线播放| 欧美一区在线视频| 成人av网站免费| 亚洲五月六月丁香激情| 国产高清视频一区| 亚洲一区二区三区小说| 久久午夜电影网| 99久久精品免费看国产| 免费在线一区观看| 亚洲日本免费电影| 国产欧美视频在线观看| 久久精品一区二区| 国内精品写真在线观看| 久久久午夜精品| 成人国产精品免费网站| 中文字幕精品一区二区精品绿巨人 | 国产福利一区二区三区| 亚洲欧美激情插| 欧美最猛性xxxxx直播| 国模娜娜一区二区三区| 亚洲国产成人va在线观看天堂| 日韩免费电影网站| 在线观看视频一区二区| 久久精品国产77777蜜臀| 久久亚洲综合色| 欧美高清性hdvideosex| 成人99免费视频| 精品综合免费视频观看| **性色生活片久久毛片| 在线播放视频一区| av成人免费在线| 国产精一区二区三区| 亚洲一区二区av在线| 国产精品免费av| 久久美女艺术照精彩视频福利播放| 韩国三级在线一区| 国产一区 二区| 精品一二线国产| 视频一区在线视频| 国产精品网曝门| 337p日本欧洲亚洲大胆色噜噜| 日韩欧美中文字幕一区| 欧美猛男男办公室激情| 欧美制服丝袜第一页| 91网站在线播放| 国产不卡高清在线观看视频| 五月婷婷综合网| 欧美精品一区二区三| 欧美电影免费观看高清完整版| 欧美久久久久久久久中文字幕| 欧美在线一二三| 欧美午夜免费电影| 国产一区亚洲一区| 国产黄色成人av| 国产乱子轮精品视频| 国产一区二区三区香蕉| 国产一区二区三区美女| 国产一区在线观看视频| 国产精品自在欧美一区| 国内精品伊人久久久久av一坑| 韩国一区二区三区| 国产成人午夜精品影院观看视频 | 国产欧美一区二区在线| 久久精品一级爱片| 国产亲近乱来精品视频| 国产精品欧美久久久久无广告| 国产精品人妖ts系列视频| 亚洲男人天堂一区| 亚洲一级二级在线| 天天影视色香欲综合网老头| 免费观看成人鲁鲁鲁鲁鲁视频| 日日噜噜夜夜狠狠视频欧美人| 久色婷婷小香蕉久久| 成人av片在线观看| 97久久精品人人爽人人爽蜜臀| 91国产免费看| 欧美va在线播放| 国产精品欧美综合在线| 国产精品久久影院| 国产日韩欧美精品综合|