js之oop <四>对象管理
对象扩展管理
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 <四>对象管理的更多相关文章
- js之oop <五>对象序列化(js的JSON操作)
js对象序列化的过程,就是对象转换为JSON的过程.JSON.stringify() 将对象序列化成JSON.(接收对象,输出字符串) var obj = {x:2,y:3}; var str = J ...
- js之oop <二> 对象属性
js中对象属性可以动态添加和删除.删除对象属性用delete关键字. function obj(){ } var oo = new obj(); oo.a = "a"; oo.b ...
- JavaScript -- 时光流逝(四):js中的 Math 对象的属性和方法
JavaScript -- 知识点回顾篇(四):js中的 Math 对象的属性和方法 1. Math 对象的属性 (1) E :返回算术常量 e,即自然对数的底数(约等于2.718). (2) LN2 ...
- 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索
原文:[高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公 ...
- 【Vue】Vue学习(四)-状态管理中心Vuex的简单使用
一.vuex的简介 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.Vuex背后的基本思想,就是前面所说的单向数据流.图4就是Vuex实现单向数据流的示意图. Store ...
- 深入理解JS异步编程四(HTML5 Web Worker)
>Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面. 一:如何使用Worker We ...
- Effective C++ ----以对象管理资源
以对象管理资源 通过对象的析构函数的自动调用来自动释放资源 第一部分:几种典型的以对象管理资源的例子 1. STL::auto_ptr 获取资源后立刻放入资源管理对象 std::auto_ptr< ...
- js中的json对象详细介绍
JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Ob ...
- JS函数的四种调用模式
函数在js中具有四种身份,分别为函数.方法.构造函数.apply或call调用 函数调用 函数调用模式中this指全局对象(window) var f1 = function() { alert ...
随机推荐
- Python strip函数用法小结
声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除序列的字符 s.lstrip(rm) 删除s字符串中开头处,位于 ...
- Objective-C objc_class 介绍
目录(?)[-] Objective-C objc_class 介绍 NSObject objc_class isa super_class name version info instanc ...
- <构建之法> 第四章 结对 读后感
粗读 第四章主要讲的是关于结对合作的事项.大多数的软件开发都是团体性的,而合作的最小单位也就是两个人,这也是软件开发中的最佳实践.而结对中,我们能够更好的编写我们的代码,能够少一些担心,对自己的代码也 ...
- Geolocation
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- PinPhoto On OS X
把多张图片摆放到屏幕任何位置并保存成文件,下次打开时恢复之前的状态! 一般使用场景: 经常要看的图片,比如说软件快捷键.库的API.英文生词.常用配色等等摆好在屏幕上以便查看和记忆. 用PS等画画.设 ...
- zjuoj 3602 Count the Trees
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3602 Count the Trees Time Limit: 2 Seco ...
- 让Docker容器使用静态独立的外部IP(便于集群组建)
需要使用Docker虚拟化Hadoop/Spark等测试环境,并且要可以对外提供服务,要求是完全分布式的部署(尽量模拟生产环境).那么我们会遇到几个问题: Container IP 是动态分配的 Co ...
- 【实践】纯jquery实现图片滑动无缝轮播,带左右按钮及控制按钮
在此随笔之前,博主已经做过一次图片滑动轮播,如过你也有看过就会知道里面的效果在自动轮播的时候有一个不太美观的效果,就是当最后一张图片滑动切换到第一张图片的时候会看到一个快速向左滑动的效果,这是很不美观 ...
- 生产者-消费者问题【Java实现】
生产者-消费者问题是经典的并发问题, 非常适合并发入门的编程练习. 生产者-消费者问题是指, 有若干个生产者和若干个消费者并发地读写一个或多个共享存储空间:生产者创建对象并放入到共享存储空间,消费 ...
- static const vs. extern const
在实现文件(.m文件)中使用static const来定义“只在编译单元内可见的常量”(只在.m文件内可见),由于此类常量不在全局符号表中,所以无须为其名称加类名前缀(一般以k开头). 在头文件中使用 ...