一:Object构造器的成员
Object.prototype:该属性是所有对象的原型(包括 Object
对象本身),语言中的其他对象正是通过对该属性上添加东西来实现它们之间的继承关系的。所以要小心使用。
二:Objetc.prototype的成员
Object.prototype.constructor:该属性指向用来构造该函数对象的构造器
Object.prototype.constructor === Object; // true
var o = new Object();
o.constructor === Object; // true
Object.prototype.toString(radix):该方法返回的是一个用于描述目标对象的字符串。特别地,当目标是一个Number对象时,可以传递一个用于进制数的参数radix
,该参数radix
,该参数的默认值为10。
var o = {prop:1};
o.toString(); // '[object Object]'
var n = new Number(255);
n.toString(); // '255'
n.toString(16); // 'ff'
Object.prototype.toLocaleString():该方法的作用与toString()
基本相同,只不过它做一些本地化处理。该方法会根据当前对象的不同而被重写,例如Date()
,Number()
,Array()
,它们的值都会以本地化的形式输出。当然,对于包括Object()
在内的其他大多数对象来说,该方法与toString()
是基本相同的。在浏览器环境下,可以通过BOM
对象Navigator
的language
属性(在IE
中则是userLanguage
)来了解当前所使用的语言。
Object.prototype.valueOf():该方法返回的是用基本类型所表示的this
值,如果它可以用基本类型表示的话。如果Number
对象返回的是它的基本数值,而Date
对象返回的是一个时间戳(timestamp
)。如果无法用基本数据类型表示,该方法会返回this
本身。
Object.prototype.hasOwnProperty(prop):该方法仅在目标属性为对象自身属性时返回true
,而当该属性是从原型链中继承而来或根本不存在时,返回false
。
Object.prototype.isPrototypeOf(obj):如果目标对象是当前对象的原型,该方法就会返回true
,而且,当前对象所在原型上的所有对象都能通过该测试,并不局限与它的直系关系。
var s = new String('');
Object.prototype.isPrototypeOf(s); // true
String.prototype.isPrototypeOf(s); // true
Array.prototype.isPrototypeOf(s); // false
Object.defineProperty:
var person = {};
// 除了value的默认值为undefined以外,其他的默认值都为false
Object.defineProperty(person, 'legs', {
set:function(v) {
return this.value = v;
},
get: function(v) {
return this.value;
},
value: 2,
writable: true,
configurable: true,
enumerable: true
});
Object.defineProperties(obj, props):该方法的作用与defineProperty()
基本相同,只不过它可以用来一次定义多个属性。
Object.getPrototypeOf(obj) :返回obj对象的原型
Object.create(obj, descr):该方法主要用于创建一个新对象,并为其设置原型,用属性描述符来定义对象的原型属性。
var parent = {hi: 'Hello'};
var o = Object.create(parent, {
prop: {
value: 1
}
});
o.hi; // 'Hello'
// 获得它的原型
Object.getPrototypeOf(parent) === Object.prototype; // true 说明parent
的原型是Object.prototype
Object.getPrototypeOf(o); // {hi: "Hello"} // 说明o的原型是{hi: "Hello"}
o.hasOwnProperty('hi'); // false 说明hi是原型上的
o.hasOwnProperty('prop'); // true 说明prop是原型上的自身上的属性。
Object.getOwnPropertyDesciptor(obj, property) :该方法可以让我们详细查看一个属性的定义。甚至可以通过它一窥那些内置的,之前不可见的隐藏属性。
Object.getOwnPropertyNames(obj) :该方法返回一个数组,其中包含了当前对象所有属性的名称(字符串),不论它们是否可枚举
Object.preventExtensions(obj)和Object.isExtensible(obj):preventExtensions()
方法用于禁止向某一对象添加更多属性,而isExtensible()
方法则用于检查某对象是否还可以被添加属性。
Object.seal(obj)和Object.isSeal(obj):seal()
方法可以让一个对象密封,并返回被密封后的对象。seal()
方法的作用与preventExtensions()
基本相同,但除此之外,它还会将现有属性设置成不可配置。也就是说,在这种情况下,我们只能变更现有属性的值,但不能删除或(用defineProperty()
)重新配置这些属性,例如不能将一个可枚举的属性改成不可枚举。
Object.freeze(obj)和Object.isFrozen(obj): freeze()
方法用于执行一切不受seal()
方法限制的属性值变更。Object.freeze()
方法可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象。