文章导航

Object.seal()

2018-9-14 10:23| 作者: admin| 查看: 176| 评论: 0|来自: 蚂蚁部落

此方法可以将对象密封起来。

密封对象的特点如下:

(1).对象不可扩展,也就是不能够添加新属性。

(2).对象的现有属性被设置为不可配置,也就是configurable属性值为true。

(3).如果对象的属性是可写的,那么属性值可写。

(4).对象的可枚举性不受影响。

(5).对象继承自原型链的属性不受影响。

关于configurable用法参阅configurable、enumerable和writable一章节。

更多内容可以参阅JavaScript Object 对象一章节。

ES5新增此方法。

语法结构:

[JavaScript] 纯文本查看 复制代码
Object.seal(obj)

参数解析:

(1).obj:必需,规定要被密封的对象。

浏览器支持:

(1).IE9+浏览器支持此方法。

(2).edge浏览器支持此方法。

(3).谷歌浏览器支持此方法。

(4).火狐浏览器支持此方法。

(5).opera浏览器支持此方法。

(6).safria浏览器支持此方法。

代码实例如下:

[JavaScript] 纯文本查看 复制代码运行代码
let antzone = {
  webName: "蚂蚁部落",
  age:4,
  address:"青岛市南区"
};
Object.seal(antzone);
antzone.age = 5;
console.log(antzone.age)

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/14/102622jkc8a18s0swwwcmm.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

直接量方式创建的属性默认都是可读写的。

只要原来是可读写的,那么密封后也是可读写。

[JavaScript] 纯文本查看 复制代码运行代码
"use strict"
let antzone = {
  webName: "蚂蚁部落",
  age:4,
  address:"青岛市南区"
};
Object.seal(antzone);
antzone.url="http://www.softwhy.com";

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/14/102701tde8li1x28h1hxzk.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

在严格模式下,如果对密封对象添加新属性,那么就会报错。

在非严格模式下,添加属性无效,但是不会报错。

[JavaScript] 纯文本查看 复制代码运行代码
let antzone = {
  webName: "蚂蚁部落",
  age:4,
  address:"青岛市南区"
};
Object.seal(antzone);
console.log(Object.getOwnPropertyDescriptor(antzone,"webName"));

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/14/102738mttedf4yfrt4sf49.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到对象被密封之后,webName属性的configurable特性值变为false,也就是不可配置。

[JavaScript] 纯文本查看 复制代码运行代码
Object.prototype.mayi="antzone"
let antzone = {
  webName: "蚂蚁部落",
  age:4,
  address:"青岛市南区"
};
Object.seal(antzone);
console.log(Object.getOwnPropertyDescriptor(Object.prototype,"mayi"));

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/14/102816rx87k5az77i7uizg.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到Object.seal方法对于原型链上的属性没有影响。

[JavaScript] 纯文本查看 复制代码运行代码
let antzone = {
  webName: "蚂蚁部落",
  age:4,
  address:"青岛市南区"
};
Object.seal(antzone);
for(let prop in antzone){
  console.log(prop);
}

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/14/102854ja00cf02roagq0kg.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到,此方法对属性的可枚举性没有任何影响。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部