对象扩展管理

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. Flink - RocksDBStateBackend

    如果要考虑易用性和效率,使用rocksDB来替代普通内存的kv是有必要的 有了rocksdb,可以range查询,可以支持columnfamily,可以各种压缩 但是rocksdb本身是一个库,是跑在 ...

  2. JS 的trim()

    去除字符串左右两端的空格,在vbscript里 可  用 trim.ltrim 或 rtrim,但 js 却没有这 3个 内置方法,需 手工编写.下面的实现方法  用到 正则表达式,效率不错, 把 三 ...

  3. zepto源码--核心方法2(class相关)--学习笔记

    继续上篇,本片主要介绍的是$.fn中与class相关的函数,包括hasClass, addClass, removeClass, toggleClass hasClass: 检查对象集合中是否有元素含 ...

  4. syslog-ng日志系统

    一.基础syslog-ng作为syslog的替代工具,可以完全替代syslog的服务,并且通过定义规则,实现更好的过滤功能.系统自带版本(我的是红旗,不同系统用不同的方式查询): 引用 # rpm - ...

  5. java取整和java四舍五入方法 BigDecimal.setScale()方法详解

    import java.math.BigDecimal; public class TestGetInt { public static void main(String[] args) { doub ...

  6. 阻塞队列LinkedBlockingQueue和并发队列ConcurrentLinkedQueue

    LinkedBlockingQueue: public class LinkedBlockingQueue<E> extends AbstractQueue<E> implem ...

  7. redis集群配置

    客户端分片 程序端实现 代理proxy,访问proxy,proxy指定redis保存位置. Twemproxy Redis cluster ,会造成一部分数据丢失,无中心化1.将数据自动切分(spli ...

  8. ArrayList 排序Sort()方法扩展

    1.sort() sort可以直接对默认继承 IComparable接口的类进行排序,如:int.string.... ArrayList arrayList = new ArrayList(); , ...

  9. 使用maven来管理您的java项目

    maven是一个项目管理工具,使用maven可以自动管理java项目的整个生命周期,包括编译.构建.测试.发布和报告等.在大型项目开发中,使用maven来管理是必不可少的. 一.安装maven 1.W ...

  10. Android利用Java反射机制修改Android System Language

    private void updateLanguage(Locale locale) { try { Object objIActMag, objActMagNative; Class clzIAct ...