对象扩展管理

Object.isExtensible() 检测对象是否可扩展(一般返回true)。
Object.preventExtensions() 防止对象扩展。

var p = {p1:"a",p1:"b"};
Object.isExtensible(p); //返回true
Object.preventExtensions(p); //防止对象扩展
Object.isExtensible(p); //返回false

对象可扩展情况下,则可以添加属性。若不可扩展,则不能添加属性。

var p = {p1:"a",p1:"b"};
p.p3 = "new_element";
p.p3; //输出new_element
Object.preventExtensions(p); //防止对象扩展
p.p4 = "new_extensible"; //添加属性失败
p.p4; //输出undefined

但防止扩展,对象原有属性的属性标签仍都是true。

var p = {p1:"a",p1:"b"};
Object.preventExtensions(p);
Object.getOwnPropertyDescriptor(p,"p1");
//返回 { value: 'b', writable: true, enumerable: true, configurable: true }

这意味着原有属性可被删除,修改。

var p = {p1:"a",p1:"b"};
Object.preventExtensions(p);
delete p.p1; //返回true 且p.p1输出undefined

***************************************************************************************************************

对象密封管理

Object.isSealed() 检测对象是否密封(一般返回false)。
Object.seal() 密封对象。

var o = { o1:1,o2:2 };
Object.seal(o); //密封对象
o.o3 = 3; //赋值不成功 o.o3返回undefined
o.o1 = 81; //o.o1返回81 修改成功
delete o.o1; //返回false 删除不成功
Object.getOwnPropertyDescriptor(o,"o1");
//返回{ value: 1,writable: true,enumerable: true,configurable: false }

对象设置seal后,对象除了禁止扩展,且对象所有属性的configurable都为false。

***************************************************************************************************************

对象冻结管理

Object.isFrozen() 检测对象是否冻结(一般返回false)。
Object.Freeze() 冻结对象。

var q = { q1:1,q2:2 };
Object.freeze(q); //冻结对象
q.q3 = 3; //赋值不成功 o.o3返回undefined
q.q2 = 100; //q.q2返回2 修改失败
delete q.q2; //返回false 删除不成功
Object.getOwnPropertyDescriptor(q,"q2");
//返回{ value: 2,writable: false,enumerable: true,configurable: false }

对象设置freeze后,对象除了被密封,且对象所有属性的writable属性都为false。

js之oop <四>对象管理的更多相关文章

  1. js之oop <五>对象序列化(js的JSON操作)

    js对象序列化的过程,就是对象转换为JSON的过程.JSON.stringify() 将对象序列化成JSON.(接收对象,输出字符串) var obj = {x:2,y:3}; var str = J ...

  2. js之oop <二> 对象属性

    js中对象属性可以动态添加和删除.删除对象属性用delete关键字. function obj(){ } var oo = new obj(); oo.a = "a"; oo.b ...

  3. JavaScript -- 时光流逝(四):js中的 Math 对象的属性和方法

    JavaScript -- 知识点回顾篇(四):js中的 Math 对象的属性和方法 1. Math 对象的属性 (1) E :返回算术常量 e,即自然对数的底数(约等于2.718). (2) LN2 ...

  4. 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索

    原文:[高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公 ...

  5. 【Vue】Vue学习(四)-状态管理中心Vuex的简单使用

    一.vuex的简介 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.Vuex背后的基本思想,就是前面所说的单向数据流.图4就是Vuex实现单向数据流的示意图.    Store     ...

  6. 深入理解JS异步编程四(HTML5 Web Worker)

    >Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面. 一:如何使用Worker We ...

  7. Effective C++ ----以对象管理资源

    以对象管理资源 通过对象的析构函数的自动调用来自动释放资源 第一部分:几种典型的以对象管理资源的例子 1. STL::auto_ptr 获取资源后立刻放入资源管理对象 std::auto_ptr< ...

  8. js中的json对象详细介绍

    JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Ob ...

  9. JS函数的四种调用模式

    函数在js中具有四种身份,分别为函数.方法.构造函数.apply或call调用 函数调用    函数调用模式中this指全局对象(window) var f1 = function() { alert ...

随机推荐

  1. Linq 动态查询排序

    Linq的排序一般是这样写的: query.OrderBy(x => x.Tel).Skip().Take(); 实际使用中排序字段可能是通过字符类型的参数来设置的,于是想这样实现: query ...

  2. Json与类对象转换

    Json在js,jquery中可以直接使用,比如下串: { "from":"en" ,"to":"zh" ," ...

  3. C++程序设计(二)

    1. 类 class CRectangle { public: int w, h; void Init( int w_, int h_ ) { w = w_; h = h_; } int Area() ...

  4. LeetCode Palindrome Permutation

    原题链接在这里:https://leetcode.com/problems/palindrome-permutation/ 题目: Given a string, determine if a per ...

  5. windows7打印时,显示脱机,提示“服务器打印后台处理程序服务没有运行”。

    1. 问题 windows7打印时,显示脱机,提示“服务器打印后台处理程序服务没有运行”. 2. 解决方法. 将下面的文字保存为bat文件执行,其中\\192.168.40.110\Lenovo M7 ...

  6. 修改easyui中datagrid表头和数据不能分开对齐的BUG。

    easyui的datagrid中表头和列只能同时全部向左对齐,全部向右对齐或者居中对齐. 有时候有需求,数据向左或向右,表头居中对齐. 在不修改源码的情况下.下面的代码可以实现该功能. 把下面代码放在 ...

  7. LUA语言注意点归集

    统计元素个数接口--只计算以整数为下标的 第一段连续元素的数目 #tab 和 table.getn() http://ju.outofmemory.cn/entry/29450 我们修改table: ...

  8. windows系统调用 利用事件对象实现进程通信

    #include "iostream" #include "windows.h" #include "cstring" using name ...

  9. gradle手工搭建java项目搭建

    1. 安装gradle. 下载http://services.gradle.org/distributions/gradle-1.9-all.zip,解压至/usr/local/目录下. 设置环境变量 ...

  10. 本地yum库制作及本地安装Docker

    生产环境中,我们总是会遇到服务器无法连接外网的情况,这样,如果想安装某个应用,而这个应用依赖的其他类库又特别多,就很痛苦了.这个时候,就需要自己制作个本地的yum库,进行本地安装.本文将以Docker ...