创建对象的基本方法
var box = new Object(); //创建一个Object对象
box.name = 'Lee'; //创建一个name属性并赋值
box.age = 100; //创建一个age属性并赋值
box.run = function() { //创建一个run方法并返回值
return this.name + this.age + "running...";
}
alert(box.run()); //输出属性和方法的值
上面创建一个对象,并且创建了属性和方法,在run()方法中的this,代表的是box对象本身.这是最基本的创建对象的方法,但有个缺点,想创建一个类似的对象,会产生大量的代码.
工厂模式
解决多个类似对象的声明问题,可解决实例化产生大量代码重复的问题.
function createObject( name, age ) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.run = function() {
return this.name + this.age + "running...";
};
return obj;
}
var box1 = createObject('Lee',10);
var box2 = createObject('Mike',20);
工厂模式解决了重复实例化的问题,但是不能解决识别问题,因为根本无法搞清楚他们到底是哪个对象的实例.
alert(typeof box1); //Object
alert(box1 instanceof Object); //true
构造函数
ECMAScript中可以采用构造函数(构造方法)来创建特定的对象.类似于Object对象
function Box(name,age) {
this.name = name;
this.age = age;
this.run = function() {
return this.name + this.age + 'running...';
}
}
var box1 = new Box('Lee',10);
var box2 = new Box('Mike',20);
使用构造函数,和使用工厂模式的方法的不同之处在于:
- 构造函数方法没有显示的创建对象(new Object());
- 直接将属性和方法赋值给this对象
- 没有return语句
构造函数的方法的一些规范:
- 函数名和实例化构造名相同且大写(非强制)
- 通过构造函数创建对象,必须使用new运算符.
构造函数执行的过程:
- 当使用了构造函数,并且new构造函数(),那么就后台执行了new Object();
- 将构造函数的作用域给新对象,而函数体内的this就代表new Object()出来的对象.
- 执行构造函数内的代码.
- 返回新对象(后台直接返回)
this
this就是代表当前作用域对象的引用.如果在全局范围this就代表window对象,如果在构造函数体内,就代表当前的构造函数所声明的对象.
读写属性
读取对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符.
var o = {
p : "Hello World"
};
o.p //"Hello World"
o["p"] //"Hello World"
删除属性
var o = {p :1};
object.kedys(o) //["p"]
delete o.p //true
o.p //undefined
object.keys(o) //[]
一旦使用delete命令删除某个属性,再读取该属性就会返回undefined
with语句
格式
with (object)
statement
它的作用是操作同一个对象的多个属性时,提供一些书写的方便
with (o) {
p1 = 1;
p2 = 2;
}
//等同于
o.p1 = 1;
o.p2 = 2;