1.Object对象
Object对象是js中所有对象的父级对象,包括内建对象。
Object.prototype可以为所有的Object类型的对象添加属性
可以通过in检测属性是否在对象上,包括继承的属性,如
function func() {}
func.prototype.z = 10;
var f = new func();
alert('z' in f);
如果不想检测继承的属性,就使用hasOwnProperty。
alert(f.hasOwnProperty('x'));
2.对象的结构
这里我们新建一个对象
var obj = {x : 1, y : 2};
alert(obj.toString()); //[object Object]
想一下,我们这里并没有定义toString方法,怎么会有返回值呢?
其实这里就是继承了Object对象,toString方法就是在Object里定义的。
function func() {}
func.prototype.z = 10;
var obj = new func();
alert(obj.z);
我们还看这段代码,其实它内部关系是这样的:
最底层是obj,它继承自foo.prototype,z这个属性也是保存在这里的,同时foo.prototype也是继承自object.prototype,最后object.prototype继承自null。这也就是原型链,这里的每个属性都有属性特性,对象也有特性,后面我会介绍。
3.Object.prototype
JavaScript语言的所有对象都是由Object衍生的对象,所有对象都继承了Object.prototype的方法和属性,Object.prototype方法如下:
(1)Object.prototype.hasOwnProperty()
功能:检测某个对象是否含有指定的自身属性
语法:obj.hasOwnProperty(prop)
描述:这个方法可以用来检测一个对象是否含有特定的自身属性,和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性
(2)Object.prototype.isPrototypeOf()
功能:检测一个对象是否存在于另一个对象的原型链上
语法:prototype.isPrototypeOf(object)
例如:
function test(){
var re = new RegExp(); //初始化变量。
return (RegExp.prototype.isPrototypeOf(re)); //返回true。
}
(3)Object.prototype.propertyIsEnumerable()
功能:检测指定的属性名是否是当前对象可枚举的自身属性
语法:obj.propertyIsEnumerable(prop)
描述:有些属性虽然可以通过 for…in 循环遍历到,但因为它们不是自身属性,而是从原型链上继承的属性,所以该方法也会返回false;如果对象没有指定的属性,该方法也返回 false。
(4)Object.prototype.toString()
功能:返回一个代表该对象的字符串
语法:object.toString()
(5)Object.prototype.valueOf()
功能:返回的诗this值,即对象本身
语法:object.valueOf()