对象
对象是动态的——可以新增属性也可以删除属性,但是对象经常用来模拟静态对象以及静态类型语言中的“结构体”。对象的属性是可以增加和删除的。
对象特性
对象原型(prototype
):指向另外一个对象,本对象的属性继承自它的原型对象。
对象的类(class
):是一个表示对象类型的字符串。
*对象的扩展标记(extensible flag
):指明是否可以向该对象添加新属性。
属性特性
可写 (是否可以设置属性值)
可枚举 (是否可以通过for in 循环返回该属性)
可配置 (是否可以删除或者修改属性)
对象的创建
对象直接量
创建对象最简单的方法是通过对象直接量。
var empty = {
}; //没有任何属性的对象
var point = {
x:0, y:0}; // 两个属性
var point2 = {
x:point.x, y:point.y+1};
var student = {
name:"Allen", //属性名可以不用引号
age:23,
school:{
//这个属性值是一个对象,
"primary school" :"试验小学",//属性名中有空格,必须字符串
"middle-school" :"育才中学" ,//属性名中有连接符,必须用字符串
}
}
/*最后注意一点,属性名尽量避免使用空格、连接符、或者关键字,如果必须使用的话,尽量用引号引起来*/
通过new 创建对象
var mObj = new Object(); // 创建一个空对象,和{}一样
var arr = new Array(); // 创建一个空数组,和[]一样
var mDate = new Date(); // 创建一个表示当前时间的Date对象
通过 Object.create()
在这里,我们先弄清楚一个名词——原型,每一个JS对象(除了null
)都和另一个对象相关联。“另一个”对象就是我们所说的原型,每一个对象都从原型继承属性。
所有通过对象直接量创建的对象都具有同一个原型对象,并可以通过JS代码Object.prototype
获得对原型对象的引用。通过关键字new
和构造函数调用创建的对象的原型就是构造函数的prototype
属性的值。因此,同使用{}创建对象一样,通过new Object()
创建对象也继承自Object.prototype
。
ECMAScript 5 定义了一个名为Object.create()
的方法,它创建一个新的对象,其中第一个参数就是对象原型,第二个参数是可选参数,用以对对象的属性进行进一步描述。
Object.create()`是静态函数,而不是提供给某一个对象调用的方法。
var obj = Object.create({
x:1,y:2