11.
{ ()()()()()()[]()()()()T(T)TT(T[])TT (T)TT(T)TT(T)T()()()()[]}
今天我们来看下对象的constructor属性。
11.1 new()对于我们来说是一个很常用的方法比如我们实例化一个Object的时候,它里面的参数可以是任何类型的,既然是实例化一个对象那么它返回的肯定还会是一个对象。
11.2 readonly property当然就不用多说了,Object property肯定是只读的。来看看getPropertyOf(),
顾名思义这是一个获取对象原型的一个方法。如:
function Foo(){}
var foo = new Foo();
console.log(Foo.prototype === Object.getPrototypeOf(foo)); //true
11.3 getOwnPropertyDescriptor()用来获取指定对象的自身属性描述符。自身属性描述符是指直接在对象上定义(而非从对象的原型继承)的描述符。直接上代码:
var person ={ name:"Hai" };
var personName = Object.getOwnPropertyDescriptor(person,"name"); //获取name属性身上的特性
console.log(personName); //输出为{value: "Hai", writable: true, enumerable: true, configurable: true}
var personToString = Object.getOwnPropertyDescriptor(person,"toString"); //此处意图获取person对象自身的toString方法
console.log(personToString); //因为toString()是Object的方法,是继承来的,所以返回undefined
Object.defineProperty(person,"name",{writable:false}); //修改name属性的可写特性为false,则不可以对name重新赋值
personName = Object.getOwnPropertyDescriptor(person,"name"); //再次获取name属性的特性
console.log(personName); //{value: "Hai", writable: false, enumerable: true, configurable: true}
person.name = "dingding"; //强行修改name
console.log(person.name); //这里仍然输出 “Hai”
11.4 getOwnPropertyNames()返回对象自己的属性的名称。一个对象的自己的属性是指直接对该对象定义的属性,而不是从该对象的原型继承的属性。对象的属性包括字段(对象)和函数。getOwnPropertyNames 方法同时返回可枚举的和不可枚举的属性和方法的名称。若要仅返回可枚举的属性和方法的名称,可使用 Object.keys 函数 (JavaScript)。如:
function Pasta(grain, width, shape) {
// Define properties.
this.grain = grain;
this.width = width;
this.shape = shape;
this.toString = function () {
return (this.grain + ", " + this.width + ", " + this.shape);
}
}
// Create an object.
var spaghetti = new Pasta("wheat", 0.2, "circle");
// Get the own property names.
var arr = Object.getOwnPropertyNames(spaghetti);
console.log(arr);
11.5 create()用于创建一个对象,参数可以使一个指定的对象原型也可以是null。返回类型为any
11.6 defineProperty()定义了一个新的属性直接在一个对象,或修改现有的属性的对象,并返回该对象。
如11.3中:Object.defineProperty(person,"name",{writable:false}); //修改name属性的可写特性为false。
11.7 defineProperties(object, descriptors)其中object为被操作的对象,descriptors包含一个或多个描述符对象的 JavaScript 对象。 每个描述符对象描述一个数据属性或访问器属性.
Object.preventExtensions():防止对象扩展。
Object.isExtensible():判断对象是否可扩展。
Object.seal():禁止对象配置。
Object.isSealed():判断一个对象是否可配置。
Object.freeze():冻结一个对象。
Object.isFrozen():判断一个对象是否被冻结。
11.8 Object.keys()和Object.getOwnPropertyNames方法很相似,一般用来遍历对象的属性。它们的参数都是一个对象,都返回一个数组,该数组的成员都是对象自身的(而不是继承的)所有属性名。它们的区别在于,Object.keys方法只返回可枚举的属性,Object.getOwnPropertyNames方法还返回不可枚举的属性名。如:
var a = ["Hello", "World"];
Object.keys(a)
// ["0", "1"]
Object.getOwnPropertyNames(a)
// ["0", "1", "length"]
----------------------------------------------------------------------------------------------------------
OVER