属性(key)的特性:
内部对象(本地对象/普通对象):是有ECMAScript规范定义的对象或类。例如:Array,Function,Date,Boolean,Global,Math,Number,Object,RegExp,String,Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError。
内置对象:Global,Math。
内部对象需要实例化,内置对象不需要实例化。
宿主对象(浏览器对象):执行js脚本的环境提供的对象,依赖于宿主,带来浏览器兼容性问题,不同的浏览器提供的宿主不同;是由js解释器所嵌入的宿主环境(比如web浏览器)定义的。客户端js中表示网页结构的HTMLElement对象均是宿主对象。既然宿主环境定义的方法可以当成普通的js函数对象,那么宿主对象也可以当成内置对象。
自定义对象:由运行中的js代码创建的对象。
自有属性:是直接在对象中定义的属性。
继承属性:是对象的原型对象中定义的属性。
检测属性: in hasOwnproperty () propertyIsEnumerable()
in:是否是自有属性或继承属性(使用‘!==’判断一个属性是否是undefined)
hasOwnproperty():是否是自有属性,对于继承属性返回false
propertyIsEnumerable()是hasOwnProperty()的增强版,只会检测到自有属性且这个属性的可枚举性为true才会返回true。
对象的三个属性:每个对象都有与之相关的原型(prototype)、类(class)、可扩展性(extensible attribute)
原型属性是在实例对象创建之初就设置好的,(直接量创建,通过new创建,通过Object.create),将对象作为参数传入Object.getPrototypeOf()可以查询它的原型。
注意:通过对象直接量或Object.create()创建的对象还包含一个名为constructor的属性,这个属性指代Object()构造函数,因此,constructor.prototype才是对象直接量的真正原型,但是对于通过Object.create()创建的对象往往不是这样。
检测一个对象是否是另外一个对象的原型,使用isPrototypeOf()方法。例如:通过p.isPrototypeOf(o)来检测p是否是o的原型。
_proto_属性可以直接查询/设置对象的原型,但是不推荐,因为IE和Opera还未实现它(Mozilla,Chrome,Safari已经实现)
类属性是一个自符串,用以表示对象的类型信息。
对象的可扩展性用以表示是否可以给对象添加新属性。
所有内置对象和自定义对象都是显式可扩展的,宿主对象的可扩展性是由js引擎定义的。
通过将对象传入Object.esExtensible()来判断该对象是否可扩展,如果想将对象转为不可扩展的,需要调用Object.preventExtensions(),将待转换的对象作为参数传进去。一但将对象转换为不可扩展的就无法再转回可扩展。
可扩展属性的目的是将对象锁定,以免外界干扰。对象的可扩展性通常和属性的可配置性与可写性配合使用。
对象的方法:
hasOwnProperty(),propertyIsEnumerable(),isPrototypeOf(),Object.create(),Object.getPrototypeOf()
toString()方法没有参数,返回一个调用这个方法的对象值的字符串。
var s={x:1,y:1}.toString() //=>"[object object]"
对象都包含toLocalString()方法,这个方法返回一个表示对象本地化字符串。
toJSON()方法,Object.prototype实际上没有定义toJSON()方法,但对于需要执行序列化的对象来说,JSON.stringify()方法会调用toJSON方法。
valueOf()和toString()方法类似,将对象转换为原始值而非字符串。
错误类型:6种:
SyntaxError:语法错误:
ReferenceError:引用错误:找不到变量
TypeError:类型错误:错误的使用了类型的API
RangeError:范围错误:函数的参数超范围
下面两种出现的情况比较少
EvalError:Eval函数使用错误
URIError:不符合URI的使用标准
什么是构造函数: 描述一类对象的统一结构的函数
什么是对象:程序中专门描述现实中一个具体事物的结构
什么是面向对象:先用对象描述出现现实中的具体事物,再根据需要调用对象中的属性和功能
什么是原型: 保存所有子对象的共有成员的父级对象
原型链: 由各级子对象的__proto__属性,逐级继承,形成的链式结构。
*****面向对象: 封装 继承 多态
1. 封装: 将现实中一个具体实物的属性和功能集中定义在一个对象中。——创建一个对象!
2.继承: 父对象中的成员,子对象无需创建,可直接使用!
3.多态::同一个事物,在不同情况下表现出不同的样子
重写: override : 如果子对象觉得父对象的成员不好用
可在本地定义同名成员,覆盖父对象的