创建一个对象然后给这个对象新建属性和方法。
<一>最基本的方法
var box = new Object(); //创建一个Object对象
box.name = 'Lee'; //创建一个name属性并赋值
box.age = 100; //创建一个age属性并赋值
box.run = function(){
return this.name + this.age + '运行中...';
};
alert(box.run()); //输出属性和方法的值
上面创建了一个对象,并且创建属性和方法,在run()方法里的this,就是代表box对象本身。这种是JavaScript创建对象最基本的方法,但是有个缺点,想创建一个类似的对象,就会产生大量的代码。
var box2 = box; //得到box的引用
box2.name = 'Jack'; //直接改变了name属性
alert(box2.run()); //用box.run()发现name也改变了
var box2 = new Object();
box2.name = 'Jack';
box2.age = 200;
box2.run = function(){
return this.name + this.age + '运行中...';
};
alert(box2.run()); //这样才避免和box混淆,从而保持独立
<二>工厂模式
为了解决多个类似对象声明的问题,我们可以使用一种叫做工厂模式的方法,这种方法就是为了解决实例化对象产生大量重复的问题。
function createObject(name,age){ //集中实例化的函数
var obj = new Object();
obj.name = name;
obj.age = age;
obj.run = function(){
return.this.name + this.age + '运行中...';
};
return obj;
}
var box1 = createObject('Lee',100); //第一个实例
var box2 = createObject('Jack',200); //第二个实例
alert(box1.run());
alert(box2.run()); //保持独立
工厂模式解决了从夫实例化的问题,但还有一个问题,那就是识别的问题,因为根本无法搞清楚他们到底是哪个对象的实例。
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 + '运行中...';
};
}
var box1 = new Box('lee',100); //new Box()即可
var box2 = new Box('Jack',200);
alert(box1.run());
alert(box1 instanceof Box); //很清晰的识别他从属于Box
使用构造函数的方法,即解决了重复实例化的问题,又解决了对象识别的问题,但是问题是,这里并没有new Object(),为什么可以实例化Box(),z这个是哪里来的呢?
使用了创造函数的方法,使用工厂模式的方法他们不同之处如下:
1、构造函数方法没有显示的创建对象(new Object());
2、直接将属性和方法赋值给this对象;
3、没有renturn语句。
构造函数的方法有一些规范:
1.函数名和实例化构造名相同且大写,(PS:非强制,但是这么写有助于区分构造函数和普通函数);
2.通过构造函数创建对象,必须使用new运算符。
1261

被折叠的 条评论
为什么被折叠?



