对象 | 构造器 | 说明 |
---|---|---|
Object |
getPrototypeOf |
返回对象的原型 |
Object |
getOwnPropertyDescriptor |
返回对象自有属性的属性描述符 |
Object |
getOwnPropertyNames |
返回一个数组,包括对象所有自有属性名称集合(包括不可枚举的属性) |
Object |
create |
创建一个拥有置顶原型和若干个指定属性的对象 |
Object |
defineProperty |
给对象定义一个新属性,或者修改已有的属性,并返回 |
Object |
defineProperties |
在一个对象上添加或修改一个或者多个自有属性,并返回该对象 |
Object |
seal |
锁定对象。阻止修改现有属性的特性,并阻止添加新属性。但是可以修改已有属性的值。 |
Object |
freeze |
冻结对象,阻止对对象的一切操作。冻结对象将永远不可变。 |
Object |
preventExtensions |
让一个对象变的不可扩展,也就是永远不能再添加新的属性。 |
Object |
isSealed |
判断对象是否被锁定 |
Object |
isFrozen |
判断对象是否被冻结 |
Object |
isExtensible |
判断对象是否可以被扩展 |
Object |
keys |
返回一个由给定对象的所有可枚举自身属性的属性名组成的数组 |
这些新增的好处之一是对象的属性有了更多控制,例如哪些是允许被修改的,哪些是可以枚举的,哪些是可以删除的等。这个的实现通过程序访问对象的属性描述符(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 function var car = Object.create(Car.prototype); car.color = "blue"; alert(car.getInfo());
例子2
var a = {a: 1}; // a ---> Object.prototype ---> null var b = Object.create(a); // b ---> a ---> Object.prototype ---> null console.log(b.a); // 1 (继承而来) var c = Object.create(b); // c ---> b ---> a ---> Object.prototype ---> null var d = Object.create(null); // d ---> null console.log(d.hasOwnProperty);
new和Object.create()的区别在哪:
function Constructor(){} o = new Constructor(); // 上面的一句就相当于: o = Object.create(Constructor.prototype);
时间: 2024-09-28 11:17:11