您的位置:首页 > Web前端 > JavaScript

《JavaScript》——面向对象之对象的创建

2016-02-17 11:18 465 查看
谈到面向对象,我们之前学过Vb和C#,从抽象到封装再到继承和多态,面向对象的世界真的很好玩,但是JavaScript中的面向对象有些特殊,因为里面没有类,而且对象的创建方式也不同。



对象的创建大约有四种方式:使用new关键字创建、使用字面量创建、使用工厂方法创建、使用构造函数创建。

1、使用new关键字

[javascript] view
plain copy

print?

<span style="font-family:KaiTi_GB2312;font-size:18px;">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()); //输出属性和方法的值</span>

2、使用字面量创建

[javascript] view
plain copy

print?

<span style="font-family:KaiTi_GB2312;font-size:18px;">var box ={

name:'帅哥',

age:'25',

run :function(){

return this.name+"的年龄是"+this.age

}

}

alert(box.run());</span>

3、使用自定义函数创建(工厂模式)

[javascript] view
plain copy

print?

<span style="font-family:KaiTi_GB2312;font-size:18px;">function createObject(name,age){

var obj=new Object();

obj.name=name;

obj.age=age;

obj.run=function(){

return this.name+this.age;

};

return obj;

};</span>

4、使用构造函数创建

[javascript] view
plain copy

print?

<span style="font-family:KaiTi_GB2312;font-size:18px;">function Box(name,age){

this.name=name;

this.age=age;

this.run=function(){

return this.name+this.age+'看我......';

};

};</span>

4、四种方式的比较

四种方式创建对象各有利弊,new关键字与字面量方式比较起来,使用字面量方式在创建对象的时候添加属性和方法比较简单,方便。但是对于创建更多类似的对象的时候,上面两种方式就变得繁琐起来,因为对象需要一个个的创建后再添加属性和方法太麻烦了,这时候工厂模式方法就出来了,使用工厂模式方法,解决了创建多个类似对象声明的问题,但是它无法区分实例从属于哪个对象,例子如下所示。

[javascript] view
plain copy

print?

<span style="font-family:KaiTi_GB2312;font-size:18px;">var box = createObject('帅哥', 20);

alert(box1 instanceof Object); //返回true,只能判断它从属于Object</span>

问题出现了,总有解决办法吧!这时候,构造函数创建对象的方法就登台了,使用构造函数的方法,即解决了重复实例化的问题,又解决了对象识别的问题。代码如下。

[javascript] view
plain copy

print?

<span style="font-family:KaiTi_GB2312;font-size:18px;">var box= new Box('美女', 20);

alert(box instanceof Box); //返回true,很清晰的识别box从属于 Box</span>

构造函数方法与工厂模式方法比较起来,构造函数方法没有显示的创建对象(没有var box = new Object()),直接将属性和方法赋值给this对象,还没有Return语句(Return obj)。这些没有的东东在使用构造函数创建对象的时候是后台自动运行的,是不是很省劲儿?

5、构造函数与普通函数的区别

声明:构造函数首字母需要大写,主要目的是为了好区分。

调用:使用new 关键字调用,var box = new Box('美女', 20);

小结

四种声明创建对象的方式层层递进,都是伴随着问题的升级而出现的,在这里我想到了金庸小说里的一句话“英雄是随着时代产生的”,映射到对象创建这个问题上来,方法是伴随着问题产生的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: