Javascript Object 对象学习笔记
构造函数
newObject()
newObject(value)
参数
value
可选的参数,声明了要转换成Number对象、Boolean对象或String对象的原始值(即数字、布尔值或字符串)。JavaScript1.1之前的版本和ECMAScriptVl不支持该对象。
返回值
如果没有给构造函数传递value参数,那么它将返回一个新创建的Object实例。如果指定了原始的value参数,构造函数将创建并返回原始值的包装对象,即Number对象、Boolean对象或String对象。当不使用new运算符,将Object()构造函数作为函数调用时,它的行为与使用new运算符时一样。
属性
constructor
对一个JavaScript函数的引用,该函数是对象的构造函数
方法
1.hasOwnProperty()
检查对象是否有局部定义的(非继承的)、具有特定名字的属性。
<scripttype="text/javascript"> varo=newObject(); o.name="Tom"; alert(o.hasOwnProperty("name")); //true alert(o.hasOwnProperty("age")); //false </script>
2.isPrototypeOf()
语法
object.isPrototypeOf(o)
参数
o
任意对象。
返回值
如果object是O的原型,则返回true。如果o不是对象,或者object不是o的原型,则返回false。
描述
JavaScript对象继承了原型对象的属性。一个对象的原型是通过用于创建并初始化该对象的构造函数的prototype属性引用的。isPrototypeOf()方法提供了判断一个对象是否是另一个对象原型的方法。该方法可以用于确定对象的类。
示例
varo=newObject( ); //创建一个对象 Object.prototype.isPrototypeOf(o) //true:o是一个对象 Function.prototype.isPrototypeOf(o.toString); //true:toString是一个函数 Array.prototype.isPrototypeOf([1,2,3]); //true:[1,2,3]是一个数组 //下面是执行同样测试的另一种方法 (o.constructor==Object); //true:owascreatedwithObject( )constructor (o.toString.constructor==Function); //true:o.toStringisafunction /原型则对象本身于原型对象。下面的调用返回true //说明函数继Function.prototype和Object.prototyp属性. Object.prototype.isPrototypeOf(Function.prototype);
3.ProertyIsEnumerable()
语法
object.propertyIsEnumerable(propname)
参数
propname
一个字符串,包含object原型的名字。
返回值
如果object具有名为propname的非继承属性,而且该属性是可枚举的(即用for/in循环可以枚举出它),则返回true。
描述
用for/in语句可以遍历一个对象“可枚举”的属性。但并非—个对象的所有属性都是可枚举的,通过JavaScript代码添加到对象的属性是可枚举的,而内部对象的预定义属性(如方法)通常是不可枚举的。propertylsEnumerable()方法提供了区分可枚举属性和不可枚举属性的方法。但要注意,ECMAScript标准规定,propertyIsEnumerable()方法不检测原型链,这意味着它只适用于对象的局部属性,不能检测继承属性的可枚举性。
示例
varo=newObject( ); //创建一个对象 o.x=3.14; //定义—个属性 o.propertyIsEnumerable("x"); //true属性x是局部的、可枚举的 o.propertyIsEnumerable("y"); //false:o没有属性y o.propertyIsEnumerable("toString"); //false:toStrlng属性是继承的 Object.prototype.propertyIsEnumerable("toString"); //false:枚举的
Bug
当标准限制propertylsEnumerable()方法只能检测非继承属性时,明显是错的。InternetExplorer5.5按标准实现了该方法。Nestacpe6.0实现的propertyIsEnumerable()方法考虑了原型链。虽然这种方法可取,但它与标准冲突,所以Netscape6.1修改了它,以便与IE5.5匹配。由于标准中有这个错误,因此该方法不是那么有用。
<script> varobj=newObject(); obj.title='aaa'; obj.funb=function(a,b) { alert(a+b); } alert(obj.title); obj.funb(1,2); </script>
这里一种方法
******************************
<scriptlanguage="javascript"> functionobject(value,a,b){ this.title=value; this.funb=function(){ this.a=a; this.b=b; alert(a+b); } } varobj=newobject("aaa",1,2); alert(obj.title); obj.funb(); //这里为对象添加新的方法 object.prototype.name="123456"; alert(obj.name); </script>
这是另一种方法