首页 > 代码库 > ECMAScript 5 新增 Object 接口

ECMAScript 5 新增 Object 接口

 

对象构造器说明
ObjectgetPrototypeOf返回对象的原型
ObjectgetOwnPropertyDescriptor返回对象自有属性的属性描述符
ObjectgetOwnPropertyNames返回一个数组,包括对象所有自有属性名称集合(包括不可枚举的属性)
Objectcreate创建一个拥有置顶原型和若干个指定属性的对象
ObjectdefineProperty给对象定义一个新属性,或者修改已有的属性,并返回
ObjectdefineProperties在一个对象上添加或修改一个或者多个自有属性,并返回该对象
Objectseal锁定对象。阻止修改现有属性的特性,并阻止添加新属性。但是可以修改已有属性的值。
Objectfreeze冻结对象,阻止对对象的一切操作。冻结对象将永远不可变。
ObjectpreventExtensions让一个对象变的不可扩展,也就是永远不能再添加新的属性。
ObjectisSealed判断对象是否被锁定
ObjectisFrozen判断对象是否被冻结
ObjectisExtensible判断对象是否可以被扩展
Objectkeys返回一个由给定对象的所有可枚举自身属性的属性名组成的数组

这些新增的好处之一是对象的属性有了更多控制,例如哪些是允许被修改的,哪些是可以枚举的,哪些是可以删除的等。这个的实现通过程序访问对象的属性描述符(property descriptors). 例如:

var cat = {};Object.defineProperty(cat, "name", {  value: "Maru",  writable: false,  enumerable: true,  configurable: false});Object.defineProperty(cat, "skill", {  value: "exploring boxes",  writable: true,  enumerable: true,  configurable: true});

1.getPrototypeOf 例子

技术分享

2.Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。

例子1

function Car (desc) {    this.desc = desc;    this.color = "red";} Car.prototype = {    getInfo: function() {      return ‘A ‘ + this.color + ‘ ‘ + this.desc + ‘.‘;    }};//instantiate object using the constructor functionvar car =  Object.create(Car.prototype);car.color = "blue";alert(car.getInfo());

例子2

var a = {a: 1}; // a ---> Object.prototype ---> nullvar b = Object.create(a);// b ---> a ---> Object.prototype ---> nullconsole.log(b.a); // 1 (继承而来)var c = Object.create(b);// c ---> b ---> a ---> Object.prototype ---> nullvar d = Object.create(null);// d ---> nullconsole.log(d.hasOwnProperty);

new和Object.create()的区别在哪:

function Constructor(){}o = new Constructor();// 上面的一句就相当于:o = Object.create(Constructor.prototype);

 

ECMAScript 5 新增 Object 接口