西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > 开发教程 > JavaScript教程 >

JavaScript“防篡改对象”的注意要点

时间:2016-03-02 09:55来源:未知 作者:好模板 点击:
防篡改对象 不可扩展对象 默认情况下,所有对象都是可扩展的: var person = { name: Oliver};person.age = 18;console.log(person.age); //18 不可扩展可以使用这个方法:Object.preventExtensions(obj); var pers

防篡改对象

不可扩展对象

默认情况下,所有对象都是可扩展的:

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

严格模式下会抛出错误;

一旦设置防扩展, 对象就无法添加新的属性和方法。 已有的属性方法不受影响, 这些属性方法仍然可以修改和删除。

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"

一旦设置密封对象, 不可以进行扩展, 已有属性和方法不可以删除, 但是属性值是可以修改的。

严格模式尝试添加或删除对象成员会抛出错误;

var person = {
    name: "Oliver"
};
Object.seal(person);
console.log(Object.isSealed(person)); //True
console.log(Object.isExtensible(person)); //False

冻结的对象

冻结对象可以使用方法: Object.freeze(obj) ;

一旦设置冻结对象, 既不可以扩展, 又是密封的, 只有通过访问器的set函数才可以修改属性值, 其他情况下不允许修改。

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

检测是否被冻结,用 Object.isFrozen() 方法

(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容