成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript 高級技巧——“防篡改對象”的注意要點

atinosun / 364人閱讀

摘要:防篡改對象不可擴展對象默認(rèn)情況下,所有對象都是可擴展的不可擴展可以使用這個方法嚴(yán)格模式下會拋出錯誤一旦設(shè)置防擴展,對象就無法添加新的屬性和方法。已有的屬性方法不受影響,這些屬性方法仍然可以修改和刪除。檢測是否被凍結(jié),用方法

防篡改對象 不可擴展對象

默認(rèn)情況下,所有對象都是可擴展的:

var person = {
    name: "Oliver"
};
person.age = 18;
console.log(person.age); //18

不可擴展可以使用這個方法: Object.preventExtensions(obj);

var person = {
    name: "Oliver"
};
person.age = 18;
console.log(person.age); //18
Object.preventExtensions(person);
person.gender = "male";
console.log(person.gender); //undefined

嚴(yán)格模式下會拋出錯誤;

一旦設(shè)置防擴展, 對象就無法添加新的屬性和方法。 已有的屬性方法不受影響, 這些屬性方法仍然可以修改和刪除。

var person = {
    name: "Oliver"
};
person.age = 18;
console.log(person.age); //18
Object.preventExtensions(person);
person.gender = "male";
console.log(person.gender); //undefined
person.name = "Oli";
console.log(person.name); //Oli

另外還可以通過使用Object.isExtensible()方法來確定對象是否可擴展

var person = {
    name: "Oliver"
};
person.age = 18;
console.log(person.age); //18
Object.preventExtensions(person);
person.gender = "male";
console.log(person.gender); //undefined
person.name = "Oli";
console.log(person.name); //Oli
console.log(Object.isExtensible(person)); //False
密封對象

密封對象可以使用方法: Object.seal(obj);

var person = {
    name: "Oliver"
};
Object.seal(person);
person.age = 18;
console.log(person.age); //undefined
person.name = "Oli";
console.log(person.name); //"Oli"
delete person.name;
console.log(person.name); //"Oli"

一旦設(shè)置密封對象, 不可以進行擴展, 已有屬性和方法不可以刪除, 但是屬性值是可以修改的。

嚴(yán)格模式嘗試添加或刪除對象成員會拋出錯誤;

var person = {
    name: "Oliver"
};
Object.seal(person);
console.log(Object.isSealed(person)); //True
console.log(Object.isExtensible(person)); //False
凍結(jié)的對象

凍結(jié)對象可以使用方法: Object.freeze(obj);

一旦設(shè)置凍結(jié)對象, 既不可以擴展, 又是密封的, 只有通過訪問器的set函數(shù)才可以修改屬性值, 其他情況下不允許修改。

var person = {
    name: "Oliver"
};
Object.freeze(person);
person.name = "Oli";
console.log(person.name); //"Oliver"
person.age = 18;
console.log(person.age); //undefined
console.log(Object.isFrozen(person)); //True

檢測是否被凍結(jié),用Object.isFrozen()方法

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78789.html

相關(guān)文章

  • JS程序設(shè)計高級技巧

    摘要:關(guān)于定時器要記住的最重要的事情是指定的時間間隔表示何時將定時器的代碼添加到隊列,而不是何時實際執(zhí)行代碼。多個定時器之間的執(zhí)行間隔會比預(yù)期的小解決辦法處理中數(shù)組分塊,,函數(shù)節(jié)流,實際進行處理的方法實際執(zhí)行的代碼初始處理調(diào)用的方法 一、高級函數(shù) 安全類型檢測 Object.protitype.toString.call(value) 作用域安全的構(gòu)造函數(shù) function Pers...

    Codeing_ls 評論0 收藏0
  • JavaScript 高級技巧——“高級定時器”注意要點

    摘要:為了規(guī)避這個問題,可以使用定時器對事件處理程序進行節(jié)流。當(dāng)?shù)诙握{(diào)用該函數(shù)時,它會清除前一次的定時器,并設(shè)置另一個。如果前一個定時器已經(jīng)執(zhí)行過了,這個操作就沒有任何意義。然而如果前一個定時器尚未執(zhí)行,其實就是將其替換為一個新的定時器。 高級定時器 為了解決setInterval的一些執(zhí)行問題, 下面是采用鏈?zhǔn)絪etTimeout的方式來規(guī)避: setTimeout(function()...

    rubyshen 評論0 收藏0
  • JavaScript 高級技巧——“高級函數(shù)”注意要點

    摘要:語法如下注意這里使用的并不是的,是內(nèi)部函數(shù)的。函數(shù)柯里化的基本方法是使用一個閉包返回一個函數(shù)。當(dāng)函數(shù)被調(diào)用時,返回的函數(shù)還需要設(shè)置一些傳入的參數(shù)。 安全的類型檢測 typeof操作符 檢測數(shù)據(jù)類型的結(jié)果可能會不正確; instanceof操作符 操作符在多個全局作用域下存在問題: var value = []; var isArray = value instanceof Array;...

    solocoder 評論0 收藏0
  • JavaScript高級程序設(shè)計》22章 JavaScript高級用法

    摘要:和的定義是指多少時間之后將回調(diào)函數(shù)加入到的執(zhí)行隊列之中回調(diào)函數(shù)是否立即執(zhí)行取決于當(dāng)前的執(zhí)行隊列是否空閑。比較好的例子如下回調(diào)函數(shù)執(zhí)行其他操作假如內(nèi)部的執(zhí)行時間為那么的回調(diào)函數(shù)至少要等待才執(zhí)行。 1、惰性加載函數(shù) (判斷各個瀏覽器中是否支持某個屬性) function addEvent(elem, type, handler){ if(elem.addEventListener...

    wanglu1209 評論0 收藏0
  • JS紅皮書解讀之篡改對象

    摘要:注意一旦把對象定義為防篡改,就無法撤銷了。使用阻止對象擴展注意嚴(yán)格模式下,不是而是報錯。使用凍結(jié)對象對于庫作者而言,凍結(jié)對象可防止有人修改庫的核心對象。 showImg(https://segmentfault.com/img/remote/1460000019753620); 前言:去年7月份在簡書寫的,發(fā)現(xiàn)后端、React中也有體現(xiàn),覺得有必要在微信上分享下。 注意:一旦把對象定義...

    張遷 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<