JavaScript基础之六(Objects,原型prototype)

1.本地对象:Array,function,date,RegExp等,浏览器对象,HTMLDocument等(host对象,也称为本地对象

2.除了string,Number,boolean,null,undefined之外的称为Object。ES5里面可以忽略最后的逗号,ES3大部分都会忽略,但是IE里面会报错。ES5里面要求name加引号。

  推荐对象的写法:name和value都加上引号,尾部的逗号去掉

3.创建对象的2种方式

1)直接写{}  2)使用new:new后面跟对象(),这样会调用对象的构造函数创建一个对象

 

4.使用new创建创建一个对象,构造函数会使用prototype值作为该对象的原型。例如new Array()就会使用Array.prototype作为原型。Object.prototype是一个特殊的对象,它没有原型,它不继承任何属性或方法。所有的对象继承Object的原型。所以当我们创建一个new Array(),会同时继承Array.prototype和Object.prototype。原型与原型之间的联系成为原型链

 

5.ECMAScript5定义了方法来创建对象:Object.create(), var obj=Object.create({“x”:”1″,”y”:”2″});obj会继承里面的属性,如果Object.create(null),那不会继承任何属性。如果想实现和{},new Object()一样的效果,可以Object.create(Object.prototype);

 

6.(ES5)使用Object.getPrototypeOf(obj)可以查询任何对象的原型,对象的构造函数constructor下面有一个属性prototype指定其具体的原型。Object.create()里面的第一个参数作为创建对象的原型。

 

7.对象的class属性是一个字符串,但是目前没有可以直接设置和获取的途径,只能间接获取对象类型。使用Object.prototype.toString.call(obj).slice(8,-1);这里提取一个通用的方法如下:

8.对象是否可扩展属性extensible:能否向一个对象添加新的属性。默认情况下所有的对象都是可扩展的。

判断一个对象是否可扩展:Object.isExtensible(obj)。设置一个对象不可扩展:Object.preventExtensions(obj)

1)Object.seal(obj):当前对象不可扩展,配置,删除。判断用:Object.isSealed(obj)

2)Object.freeze(obj):封闭程度更深,不可扩展,不可配置,不可删除,不可修改,只能读取。判断用:Object.isFrozen(obj)

 

9.对象序列化:把Object转换为string,并且可以反序列string到Object。ES5里面提供了两个对应的方法——①序列化JSON.stringify(obj),②反序列JSON.parse(obj)。向后兼容可以引入一个json2.js. 把对象序列化为json字符串的过程中,这些属性NaN,Infinity,-Infinity会被转换为null。Date会被转换为ISO格式。如果碰到不能被序列化的属性,则忽略。

 

10.Object涉及的方法:hasOwnProperty(),  propertyIsEnumerable(),  isPrototypeOf(),  Object.create(),  Object.getPrototypeOf()

1)toString():Object.prototype里面的这个方法没什么太多作用。常常会被其他的对象来重写。比如Array.toString,Date.toString(),Function.toString().

2)toLocalString():返回一个对象的本地string

3)toJSON():不是定义在Object.prototype上的方法,JSON.stringify()会寻找被序列化对象上的这个方法,如果有则调用。

4)valueOf():Object转换为基本类型时调用

javascript
作者:张雪飞
出处:https://zhangxuefei.site/p/25
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

发表评论

电子邮件地址不会被公开。 必填项已用*标注