JS笔记 | object的prototype属性对象中有什么

Object的prototype属性对象在ES5.1和ES2015中都规定constructor、toString()、toLocaleString()、valueOf()、hasOwnProperty(V)、isPrototypeOf(V)、propertyIsEnumerable(V)7个属性,其中,constructor会默认指向创建对象的function,其他6个是方法

  • toString:将对象转换为字符串,不同类型的对象可能会重写自己的toString方法。

比如,Array的toString方法会将其所包含的元素使用逗号连接起来组成字符串并返回、Date的toString方法会返回Date的时间字符串等,普通object类型对象会返回[object Object]

  • toLocaleString:会使用本地化格式来生成字符串,对于时间日期类型和数字类型的作用比较大
  • valueOf:会返回原始值。

比如,因为Date类型对象是通过数字来保存的,所以当Date类型对象调用valueOf时就会获得相应的数字。

  • hasOwnProperty:判断是否包含指定属性。注意,这里判断的对象自身是否包含指定的属性,不包括创建对象的function对象的protype中的属性。
  • isPrototypeOf:判断是否是另一个对象所对应的prototype对象。
  • propertyIsEnumerable:判断某个属性是否可以枚举。
function log(msg){
	console.log(msg);
}
var array=[1,3,5];
var date=new Date();
log(array.toString());	//1,3,5
log(date.toString());	//Tue Feb 19 2019 14:08:54 GMT+0800 (中国标准时间)
log(date.toLocaleString());	//2019/2/19 下午2:08:54
log(date.valueOf());	//1550556534688

var Obj=function(){
	this.msg="hello";
	this.say=function(){
		log(msg)
	}
}
var proto={color:"red"};
Obj.prototype=proto;
var obj=new Obj();
log(obj.constructor);	//ƒ Object() { [native code] }
log(obj.hasOwnProperty("msg"));	//true
log(obj.hasOwnProperty("lolor"));	//false
log(obj.propertyIsEnumerable("msg"));	//true
log(obj.isPrototypeOf(proto));	//false
log(proto.isPrototypeOf(obj));	//true

需要注意,因为将Obj的prototype属性赋值为proto对象,所以创建的obj对象在调用constructor属性时就不会反悔Obj对象而是返回Object对象。可以通过对proto对象进行修改来修复这个问题

var proto={color:"red"};
proto.constructor=Obj;
Obj.prototype=proto;
var obj=new Obj();
console.log(obj.constructor);

这就可以正确地输出constructor了。

除标准中规定的Object的prototype属性对象中的7个属性外,不同浏览器还会有一些自己的扩展。如:Firefox中扩展到14个属性:consturctor、toSource、toString、toLocaleString、valueOf、watch、unwatch、hasOwnProperty、isPrototypeOf、propertyIsEnumerable、_ _defineGetter_ _、_ _defineSetter_ _、_ _lookupGetter_ _、_ _lookupSetter_ _。但是并非通用属性,其它浏览器中可能没有定义,如果使用很可能造成不兼容的问题。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值