对象的属性特性:
1、可写(writable)
2、可枚举(enumerable)
3、可配置configurable
对象特性:
1、对象的原型(prototype)
2、对象的类(class)
3、对象的扩展标记
对象的种类
1、内置对象(数组、函数、日期和正则表达式)
2、宿主对象 htmlelement
3、自定义对象
属性的种类
自有属性
继承属性
原型:
每一个js对象(null和Object.prototype除外)都和另一个对象相关联,每一个对象都从原型继承属性
对象直接量({})和new Object的原型对象是Object.prototype
函数对象(function(){})的原型是Function.prototype
Date对象(new Date())的原型是Date.prototype
Array对象(new Array或者[])的原型是Array.prototype
RegExp对象(new RegExp())的原型是RegExp的原型是RegExp.prototype,
new加构造函数的对象的原型是构造函数的原型
其他原型对象都是普通对象,普通对象都具有原型。所有的内置构造函数(Function Array Date RegExp)以及自定义的构造函数都具有一个继承自Object.prototy的原型,比如Data.prototype的属性继承自Object.prototype,因此由new Date()创建的Date对象的属性同时继承自Date.prototype和Object.prototype.这一系列连接的原型对象就是所谓的原型链
Object.create()创建一个新对象,其中第一个参数是这个新对象的原型
var o={x:1,y:2}; var t=Object.create(o); console.log(t.x);//1 var t2=console.log(Object.create(Object.prototype));//{} function inherit(p){ if(p==null) throw TypeError(); var t=typeof p; if(t!=="object"&&t!=="function"){ throw TypeError(); } var f=function(){}; f.prototype=p; return new f(); } var t3=inherit(o); console.log(t3.x);//1
继承
属性赋值要么失败,要么创建一个属性,要么在原始对象中设置属性
属性访问错误
查询一个不存在的属性并不会报错,如果在对象O自身的属性或者继承的属性中均未找到属性x,属性表达式o.x则返回undefined
但是。如果对象不存在,那么试图查询这个不存在的对象的属性就会报错
简练和保险的做法
var len=book&&book.subtitle&&book.subtitle.length;