一、创建对象
var box = new Object(); //创建一个Object对象 box.name = 'Lee'; //创建一个name属性并赋值 box.age = 100; //创建一个age属性并赋值 box.run = function(){ return this.name + this.age+'运行中....'; }
var box2 = box; //得到box的引用 此时box2和box引用的是同一个地址里的对象
box2.name = 'Jack'; //直接改变了box对象里的name属性
alert(box2.run()); // Jack100运行中...
上面创建了一个对象,这种是JavaScript创建对象最基本的方法,但有个缺点,想创建一个类似的对象会产生大量的代码。
var box2 = new Object(); //重新创建一个Object对象
box2.name = 'Lee'; //创建一个name属性并赋值
box2.age = 100; //创建一个age属性并赋值
box2.run = function(){
return this.name + this.age+'运行中....';
}
alert(box2.run()); //这样才和box区分开来。并且独立
二、工厂模式
funciton createObject(name,age){ //集中实例化的函数 var obj = new Object(); obj.nane = name; obj.age = age; obj.run = function(){ return this.name + this.age+'运行中....'; }; return obj; //返回对象 } var box1 = createObject('Lee',100); //第一个实例 var box2 = createObject('Howie',200); //第二个实例 //两个实例都是独立的
缺点:识别问题,无法搞清楚他们是那个对象的实例。对象都是Object。
alert(typeof box1); //object alert(box1 instanceof Object); //ture
三、构造函数
ECMAScript中可以采用构造函数(构造方法)可用来创建特定的对象。类型于Object对象
function Box(name,age){ //创建一个对象,所有构造函数的对象其实都是Object this.name = name; this.age = age; this.run = function(){ return this.name + this.age + '运行中..'; }; }
var box1 = new Box('Jack',200); alert(box1 instanceof Object); //true alert(box1 instanceof Box); //true 清晰的识别box1实例的对象为Box
使用了构造函数的方法,和使用工厂模式的方法他们不同之处如下:
1.构造函数方法没有显示的创建对象(new Object());
2.直接将属性和方法赋值给this 对象;
3.没有renturn 语句。
构造函数的方法有一些规范:
1.函数名和实例化构造名相同且大写,(PS:非强制,但这么写有助于区分构造函数和普通函数);
2.通过构造函数创建对象,必须使用new 运算符。
关于this的使用,this其实是代表当前作用域的对象的引用。
如果是全局范围this就代表window对象,如果在构造函数体内,就代表当前构造函数所申明的对象。