本文是根据李炎恢老师的相关视频和讲义整理成的,如果感兴趣可以亲自去听李炎恢老师的相关课程。讲的很详细。下面是链接:javascript视频教程
1.一般方法:
创建一个对象,然后给这个对象新建属性和方法。
var box = new
Object(); //创建一个Object 对象
box.name =
‘Lee‘; //创建一个name 属性并赋值
box.age =
100; //创建一个age 属性并赋值
box.run = function ()
{ //创建一个run()方法并返回值
return
this.name + this.age + ‘运行中...‘;
};
alert(box.run()); //输出属性和方法的值
缺点:不适合大量创建类似对象,这样会需要很多代码
2.工厂模式
为了解决多个类似对象声明的问题,我们可以使用一种叫做工厂模式的方法,这种方法
就是为了解决实例化对象产生大量重复的问题。
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 =
creatObject("Lee",100);
var box2 = creatObject("xia",200);
缺点:无法知道他们到底是哪个对象的实例。
alert(box1 instanceof
Object); //true
3.
构造函数法
function Box(name,age){
this.name = name;
this.age = age;
this.run = function(){
return this.name +this.age
+"正在运行中……";
};
}
var box1 = new Box("Lee",100);
var box2 = new Box("xia",200);
alert(box1 instanceof
Box); //true,很清楚的知道box1属于Box类
使用了构造函数的方法,和使用工厂模式的方法他们不同之处如下:
<1>构造函数方法没有显示的创建对象(new Object());
<2>直接将属性和方法赋值给this 对象;
<3>没有renturn 语句。
构造函数的方法有一些规范:
<1>函数名和实例化构造名相同且大写,(PS:非强制,但这么写有助于区分构造函数和普通函数);
<2>通过构造函数创建对象,必须使用new 运算符。
既然通过构造函数可以创建对象,那么这个对象是哪里来的,new Object()在什么地方
执行了?执行的过程如下:
<1>当使用了构造函数,并且new 构造函数(),那么就后台执行了new Object();
<2>将构造函数的作用域给新对象,(即new Object()创建出的对象),而函数体内的this 就代表new
Object()出来的对象。
<3>执行构造函数内的代码;
<4>返回新对象(后台直接返回)。
构造函数和普通函数的唯一区别,就是他们调用的方式不同。只不过,构造函数也是函
数,必须用new 运算符来调用,否则就是普通函数。
var box = new Box(‘Lee‘,
100); //构造模式调用
alert(box.run());
Box(‘Lee‘,
20); //普通模式调用,无效
var o = new Object();
Box.call(o, ‘Jack‘, 200);
//对象冒充调用
alert(o.run());
关于对象中的引用类型:
var box1 = new Box(‘Lee‘, 100);
var box2 = new Box(‘Lee‘, 100);
alert(box1.name ==
box2.name); //true,属性的值相等
alert(box1.run ==
box2.run); //false,方法其实也是一种引用地址
alert(box1.run() ==
box2.run()); //true,方法的值相等,因为传参一致
可见方法也是一个引用类型,每一个实例中的引用类型都是使用不同的地址;