关闭

javascript中的Object对象

标签: javascriptObjecttoStringconstructorisPrototypeOf
492人阅读 评论(0) 收藏 举报
分类:
Object是JS种一个超级对象,所有的JS对象都继承自Object,该对象包含有一下方法:


constructor:如果将constructor比作一个指针的的话,那么它指向的是JS对象的构造器,我们常用constructor来判断自定义对象的类型,以补足Object.prototype.toString.call()和typeof在判断JS对象类型上的不足。PS:constructor是可以读写的,使用的时候要注意是否被覆盖。
var o={a:"abc",b:2,f:function(){}};
alert(o.constructor); //function Object(){[native code]}
alert(o.constructor===Object);
alert(o.f.constructor); //function Function(){[native code]}
alert(o.f.constructor===Function); //true
function Person(){this.name="person";}
var person = new Person();
alert(person.constructor); //function Person(){this.name="person";}
alert(person.constructor===Person); //true

toString: 该方法返回的是调用对象的字符串表示,Object.toString返回[object Object],JS的原生对象都覆盖了Object的toString方法,同时我们也可以在自定义对象中覆盖Object的toString;
alert(oo.toString()); //[object Object]
var d=new Date();
alert(d.toString()); //Tue Dec 03 2013 23:43:13 GMT+0800 (中国标准时间)
var c=function(){var str = "hello";};
alert(c.toString()); //function(){var str = "hello";}
var o={a:"abc",b:2,toString:function(){return "我覆盖了toString";}};
alert(o.toString()); //我覆盖了toString
通过动态调用Object.prototype.toString的方法可以返回标准的[object ClassName]格式,我们通常使用该方法用来判断原生JS对象的类型。
function classof(o){
	if(typeof o == "undefined") return "Undefined";
	return Object.prototype.toString.call(o).slice(8,-1);
}
alert(classof(null)); //Null
alert(classof(new Date())); //Date
alert(classof(undefined)); //Undefined
alert(classof(new Object())); //Object
alert(classof((function(){}))); //Function
alert(classof(true)); //Boolean
alert(classof(1));//Number
alert(classof("aa"));//String

valueOf:该方法和toString方法的一般都返回相同的值,只有在Date对象的时候,会有所不同;
var d = new Date();
alert(d.toString()); //Wed Dec 04 2013 00:24:58 GMT+0800 (中国标准时间) 
alert(d.valueOf()); //1386087898847

toLocaleString() 返回对象的一个本地化字符串。对于JS的原生对象来说toString和toLocaleString一般都返回相同的值,Array , Date和Number的返回值会有所不同。 
var arr = [1,2,"123",new Date()];
alert(arr.toString()); //1,2,123,Wed Dec 04 2013 00:47:12 GMT+0800 (中国标准时间) 
alert(arr.toLocaleString()); //1,2,123,2013年12月4日 上午12:47:12 
var d = new Date();
alert(d.toString()); //Wed Dec 04 2013 00:47:12 GMT+0800 (中国标准时间) 
alert(d.toLocaleString()); //2013年12月4日 上午12:47:12 
var n = 464645.515;
alert(n.toString()); //  464645.515 
alert(n.toLocaleString()); //  464,645.515 

hasOwnProperty:检测是否对象的本地成员,常用于检查是否为对象本身的一个成员,如果该属性或者方法是该 对象自身定义的而不是器原型链中定义的 则返回true;否则返回false;
alert("Test String".hasOwnProperty("split"));// 得到false, 因为不能检测原型链中的属性  


alert(String.prototype.hasOwnProperty("split"));// String对象的原型上本来就有这个属性,自然返回true 


alert(({fnTest:function(){}}).hasOwnProperty("fnTest")); // 返回true,因为不是检测原型中的属性 

isPrototypeOf:用来判断指定对象obj1是否在另一个对象obj2的原型链上,是则返回true,否则返回false。 

function Person(){}
var person = new Person();

function P2(){};
P2.prototype=new Person();
P2.prototype.b="B";
var p = new P2();


alert(P2.prototype.isPrototypeOf(p));  //true p作为P2的实例对象,P2.prototype在p的原型链上
alert(Person.prototype.isPrototypeOf(p)); //true P2的原型对象指向一个Person的实例对象,则Person.prototype在p的原型链上
alert(Object.prototype.isPrototypeOf(p)); //true JS中的所有对象都继承自Object,则Object.prototype在p的原型链上


propertyIsEnumerable:通过该方法我们可以检测出一个对象成员是否是可遍历的,格式:object.propertyIsEnumerable(proName)

如果 proName 存在于 object 中且可以使用一个 For…In循环穷举出来,那么 propertyIsEnumerable 属性返回 true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的,那么 propertyIsEnumerable 属性返回 false。典型地,预定义的属性不是可列举的,而用户定义的属性总是可列举的。

propertyIsEnumerable 属性不考虑原型链中的对象。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:35459次
    • 积分:593
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:17篇
    • 译文:0篇
    • 评论:0条
    文章分类