虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都或多或少的支持了ECMAScript5的新特性,其中重中之重自然是一切对象的基类型——Object

Object.create(prototype[,descriptors])

这个方法用于创建一个对象,并把其prototype属性赋值为第一个参数,同时可以设置多个descriptors,关于decriptor下一个方法就会介绍这里先不说。只需要这样就可以创建一个原型链干净对象了

var o = Object.create({
"say": function () {
alert(this.name);
},
"name":"Byron"
});

Object.defineProperty(O,Prop,descriptor) / Object.defineProperties(O,descriptors)

想明白这两个函数必须明白descriptor是什么,在之前的JavaScript中对象字段是对象属性,是一个键值对,而在ECMAScript5中引入property,property有几个特征

1. value:值,默认是undefined

2. writable:是否是只读property,默认是false,有点像C#中的const

3. enumerable:是否可以被枚举(for in),默认false

4. configurable:是否可以被删除,默认false

同样可以像C#、Java一样些get/set,不过这两个不能和value、writable同时使用

5.get:返回property的值得方法,默认是undefined

6.set:为property设置值的方法,默认是undefined

Object.defineProperty(o,'age', {
value: 24,
writable: true,
enumerable: true,
configurable: true
}); Object.defineProperty(o, 'sex', {
value: 'male',
writable: false,
enumerable: false,
configurable: false
}); console.log(o.age); //24
o.age = 25; for (var obj in o) {
console.log(obj + ' : ' + o[obj]);
/*
age : 25 //没有把sex : male 遍历出来
say : function () {
alert(this.name);
}
name : Byron
*/
}
delete o.age;
console.log(o.age);//undefined console.log(o.sex); //male
//o.sex = 'female'; //Cannot assign to read only property 'sex' of #<Object>
delete o.age;
console.log(o.sex); //male ,并没有被删除

也可以使用defineProperties方法同时定义多个property,

Object.defineProperties(o, {
'age': {
value: 24,
writable: true,
enumerable: true,
configurable: true
},
'sex': {
value: 'male',
writable: false,
enumerable: false,
configurable: false
}
});

Object.getOwnPropertyDescriptor(O,property)

这个方法用于获取defineProperty方法设置的property 特性

var props = Object.getOwnPropertyDescriptor(o, 'age');
console.log(props); //Object {value: 24, writable: true, enumerable: true, configurable: true}

Object.getOwnPropertyNames

获取所有的属性名,不包括prototy中的属性,返回一个数组

console.log(Object.getOwnPropertyNames(o)); //["age", "sex"]

例子中可以看到prototype中的name属性没有获取到

Object.keys()

和getOwnPropertyNames方法类似,但是获取所有的可枚举的属性,返回一个数组

console.log(Object.keys(o)); //["age"]

上面例子可以看出不可枚举的sex都没有获取的到

Object.preventExtensions(O) / Object.isExtensible

方法用于锁住对象属性,使其不能够拓展,也就是不能增加新的属性,但是属性的值仍然可以更改,也可以把属性删除,Object.isExtensible用于判断对象是否可以被拓展

console.log(Object.isExtensible(o)); //true
o.lastName = 'Sun';
console.log(o.lastName); //Sun ,此时对象可以拓展 Object.preventExtensions(o);
console.log(Object.isExtensible(o)); //false o.lastName = "ByronSun";
console.log(o.lastName); //ByronSun,属性值仍然可以修改 //delete o.lastName;
console.log(o.lastName); //undefined仍可删除属性 o.firstname = 'Byron'; //Can't add property firstname, object is not extensible 不能够添加属性

Object.seal(O) / Object.isSealed

方法用于把对象密封,也就是让对象既不可以拓展也不可以删除属性(把每个属性的configurable设为false),单数属性值仍然可以修改,Object.isSealed由于判断对象是否被密封

Object.seal(o);
o.age = 25; //仍然可以修改
delete o.age; //Cannot delete property 'age' of #<Object>

Object.freeze(O) / Object.isFrozen

终极神器,完全冻结对象,在seal的基础上,属性值也不可以修改(每个属性的wirtable也被设为false)

Object.freeze(o);
o.age = 25; //Cannot assign to read only property 'age' of #<Object>

最后

上面的代码都是在Chrome 29下一严格模式(’use strict’)运行的,而且提到的方法都是Object的静态函数,也就是在使用的时候应该是Object.xxx(x),而不能以对象实例来调用。总体来说ES5添加的这些方法为javaScript面向对象设计提供了进一步的可配置性,用起来感觉很不错。

ES5 object的新函数的更多相关文章

  1. javascript Object的新方法

    今天复习es6,又看到Object的一堆方法,与es5的表现又有不一致,耗费了一整天,整理一下: 前几天在司徒正美的书里又看到了es5 Object的字眼,为了向下兼容,大神们也是牛逼的整理出一系列i ...

  2. 重构 改善既有代码的设计 Replace Method with Method Object(以函数对象取代函数)

    你有一个大型函数,其中对局部变量的使用使你无法采用Extract Method. 将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的字段.然后你可以在同一个对象中将这个大型函数分解为多个小型 ...

  3. CREATE FUNCTION - 定义一个新函数

    SYNOPSIS CREATE [ OR REPLACE ] FUNCTION name ( [ argtype [, ...] ] ) RETURNS rettype { LANGUAGE lang ...

  4. SQL Server 2019 新函数Approx_Count_Distinct

    2019年11月4日微软发布了2019正式版,该版本有着比以往更多强大的新功能和性能上的优势,可参阅SQL Server 2019 新版本. SQL Server 2019具有一组丰富的增强功能和新功 ...

  5. ES6 Map vs ES5 Object

    ES6 Map vs ES5 Object Map vs Object https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenc ...

  6. 160_技巧_Power BI 新函数-计算工作日天数

    160_技巧_Power BI 新函数-计算工作日天数 一.背景 Power BI 2022 年 7 月 14 日更新了最新版本的,版本号为:2.107.683.0 . 更多更新内容可以查看官方博客: ...

  7. ECMAScript5 Object的新属性方法

    虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都 ...

  8. javascript ES5 Object对象

    原文:http://javascript.ruanyifeng.com/stdlib/object.html 目录 概述 Object对象的方法 Object() Object.keys(),Obje ...

  9. firefox-Developer开发者站点——关于Object.create()新方法的介绍

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create Objec ...

随机推荐

  1. python运维开发(二十三)---tornado框架

    内容目录: 路由系统 模板引擎 cookie 加密cookie 自定义api 自定义session 自定义form表单验证 异步非阻塞 web聊天室实例 路由系统 路由系统其实就是 url 和 类 的 ...

  2. wine下汉字方块解决

    1.修改字体 首先,下载一个字体,例如win下的新宋体 其次, mkdir /usr/share/fonts/windows mv simsun.ttc /usr/share/fonts/window ...

  3. PAT 大数运算

    PAT中关于大数的有B1017,A1023,A1024 (A-Advance,B-Basic) B1017 1017. A除以B (20) 本题要求计算A/B,其中A是不超过1000位的正整数,B是1 ...

  4. Tempter of the Bone(dfs+奇偶剪枝)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  5. c链表结点的删除和添加

    #include<stdio.h> #include<stdlib.h> typedef char datetype;/*定义新的数据类型名*/ typedef struct ...

  6. Asp.net web服务处理程序(第六篇)

    四.Web服务处理程序 对于Web服务来说,标准的方式是使用SOAP协议,在SOAP中,请求和回应的数据通过XML格式进行描述.在Asp.net 4.0下,对于Web服务来说,还可以选择支持Ajax访 ...

  7. SqlDataAdapter类

    SqlDataAdapter类常用操作 SqlDataAdapter常用于从数据库中返回一个结果集时. 常用操作: Fill(); 示例: static void Main(string[] args ...

  8. Linux APP源码级编译安装

    首先需要了解下tar包. 以下文章作出解释了: http://www.cnblogs.com/laipDIDI/articles/2214270.html http://baike.baidu.com ...

  9. hdu 4620 Fruit Ninja Extreme

    Fruit Ninja Extreme Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  10. PHP函数十进制、二进制、八进制和十六进制转换

    PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明,主要掌握各进制转换的方法,以应用于实际开发. 一,十进制(decimal system)转换函数说明 1,十进制转二进制 decbin ...