無標題文章

一、為什么需要引入防篡改對象?


1.

為什么?JavaScript 共享的本質一直是開發人員心頭的痛,因為任何對象都可以被在同一環境中運行的代碼修改。


2.

解決:我們可以手工設置每個對象屬性的

[[Configurable]]

[[Writable]]

[[Enumerable]]

[[Value]]

[[Get]]

以及

[[Set]]

特性,同樣我們可以設置對象的行為。


一、不可擴展的對象


1.

默認情況下,所有對象都是可以擴展的。也就是說,任何時候都可以向對象中添加屬性和方法


??????? var o = {


??????????? name :

"zhang"


??????? }


??????? o.age =

23

;


??????? alert(o.age);?????? //

23


2.

使用Object.preventExtensions()方法可以改變這個行為,讓你不能再給對象添加屬性和方法。


??????? var o = {


??????????? name :

"zhang"


??????? }


??????? alert(Object.isExtensible(o));? //

true


??????? Object.preventExtensions(o);


??????? o.age =

23

;


??????? alert(o.age);?????? // undefined


??????? alert(Object.isExtensible(o));? //

false


二、密封的對象


??? 密封對象不可擴展,而且已有成員的

[[Configurable]]

特性將被設置為

false

。這就意味著不能刪除屬性和方法,因為不能使用Object.defineProperty()把數據屬性修改為訪問器屬性,或者相反。屬性值是可以修改的。


??????? var o = {


??????????? name :

"zhang"


??????? }


??????? // alert(Object.isExtensible(o));?? //

true


??????? // alert(Object.isSealed(o));?? //

false


??????? // 不能添加屬性和方法


??????? Object.seal(o);


??????? o.age =

23

;


??????? // alert(o.age);??????? // undefined


??????? // 不能刪除屬性


??????? delete o.name;


??????? // alert(o.name);?????? // zhang


??????? // 可以修改已有屬性的值


??????? o.name =

"li"

;


??????? alert(o.name);


??????? alert(Object.isExtensible(o));? //

false


??????? alert(Object.isSealed(o));? //

true


三、凍結的對象


??? 凍結的對象既不可擴展,又是密封的,而且對象數據屬性的

[[Writable]]

特性會被設置為

false

。如果定義

[[Set]]

函數,訪問器屬性仍然是可寫的。


??????? var o = {


??????????? name :

"zhang"


??????? }


??????? // alert(Object.isExtensible(o));?? //

true


??????? // alert(Object.isSealed(o));?? //

false


??????? // alert(Object.isFrozen(o));?? //

false


??????? // 不能添加屬性和方法


??????? Object.freeze(o);


??????? o.age =

23

;


??????? // alert(o.age);??????? // undefined


??????? // 不能刪除屬性


??????? delete o.name;


??????? // alert(o.name);?????? // zhang


??????? // 不可以修改屬性


??????? o.name =

"li"

;


??????? // alert(o.name);


??????? alert(Object.isExtensible(o));? //

false


??????? alert(Object.isSealed(o));? //

true


??????? alert(Object.isFrozen(o));? //

true

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容

  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,263評論 0 4
  • ##**理解對象**## --- ###**屬性類型** > JavaScript中有兩種屬性類型 分別是 數據屬...
    nullunde閱讀 311評論 0 0
  • var a = 1; console.log(typeof a);// 'number' var b = '1';...
    zdnexus閱讀 336評論 0 0
  • 一、理解對象 1.創建 ①構造函數 new Object ②對象字面量 var o = {}; 2.屬性類型 ①數...
    duJing閱讀 425評論 0 0
  • 轉至元數據結尾創建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 1,755評論 0 9