JavaScript中防篡改對象

JavaScript中防篡改對象

測試:Chrome
前言:ECMAScript5中增加了指定對象的行爲,在這之前我們先看看如何手動設置屬性的‘Configurable’、‘Writable’、‘Enumerable’、‘Value’、‘Get’、‘Set’—這些通過字面意思大家應該也能理解的,就不多說了,下面舉一個例子:(要用到對象的.defineProperty()這個方法)

Object.defineProperty(person,'name',{writable:false,value:'zs'})
    alert(person.name)//zs
    person.name = 'ls';
    alert(person.name)//zs

var person = { name: “somjor” };
1. preventExtensions(不可擴展對象)

 var person = { name: "somjor" };
Object.preventExtensions(person);
//不能給person對象添加新屬性和方法了;

person.age = 29;
alert(person.age); //undefined
//但是你還可以對原來的屬性進行修改刪除;

person.name = 'ls'
    alert(person.name)//ls
delete person.name
alert(person.name)//undefined

//使用isExtensible可以判斷對象是否可以擴展
alert(Object.isExtensible(person))//false
2. seal(密封對象)
2.1. 密封對象不可擴展,而且已有成員的‘configurable’被設置成了false,意味不能刪除屬性和方法,但可以修改的
var person = { name: "somjor" };
    Object.seal(person);
    person.age = 29;
    alert(person.age); //undefined

    person.name = 'ls'
    alert(person.name)//ls

    delete person.name
    alert(person.name)//ls

    alert(Object.isExtensible(person))//false
    //使用isSealed可以判斷對象是否被密封了;
    alert(Object.isSealed(person))//true;
3. freeze(凍結對象)
3.1. 凍結的對象既不可擴展,又是密封的,而且對象

數據屬性的 [[Writable]] 特性會被設置爲 false 。 如果定義 [[Set]] 函數, 訪問器屬性仍然是可寫的。(後面這句在書上看的!!!)

 var person = { name: "somjor" };
    Object.freeze(person);
    person.age = 29;
    alert(person.age); //undefined

    person.name = 'ls'
    alert(person.name)//somjor

    delete person.name
    alert(person.name)//somjor

    alert(Object.isExtensible(person))//false
    alert(Object.isSealed(person))//true

    Object.defineProperty(person,'_name',{
//        get:function(){return name},
        set:function(newname){ this.name=newname}
    })
    person._name='zhangsan';
    alert(person.name)//Cannot define property:_name, object is not extensible.
//不知道是不是我寫錯了還是怎麼,還是不能修改。如果把Object.freeze(person)註釋掉就可以了。

//可以用 isFrozen判斷對象是否凍結;
alert(Object.isFrozen(person))//true;


區別:preventExtensions:不能擴展,但可以對原有的屬性進行修改,刪除;
seal:不能擴展,刪除,但可以對原有的屬性進行修改;
freeze:不能擴展,刪除,修改;

發佈了80 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章