码迷,mamicode.com
首页 > 编程语言 > 详细

《JavaScript》——面向对象与原型

时间:2015-08-07 11:11:08      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:web开发   javascript   

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


技术分享   

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

    1、使用new关键字

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、使用字面量创建 
var box ={
	name:'帅哥',
	age:'25',
	run :function(){
		return this.name+"的年龄是"+this.age
	}
}

alert(box.run());
  3、使用自定义函数创建(工厂模式)

function createObject(name,age){
	var obj=new Object();
	obj.name=name;
	obj.age=age;
	obj.run=function(){
		return this.name+this.age;
	};
	return obj;
};

  4、使用构造函数创建

function Box(name,age){
	this.name=name;
	this.age=age;
	this.run=function(){
		return this.name+this.age+'看我......';
		
	};
};
   4、四种方式的比较 

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

var box = createObject('帅哥', 20);
alert(box1 instanceof Object); //返回true,只能判断它从属于Object
    问题出现了,总有解决办法吧!这时候,构造函数创建对象的方法就登台了,使用构造函数的方法,即解决了重复实例化的问题,又解决了对象识别的问题。代码如下。

var box= new Box('美女', 20);
alert(box instanceof Box); //返回true,很清晰的识别box从属于 Box
   构造函数方法与工厂模式方法比较起来,构造函数方法没有显示的创建对象(没有var box = new Object()),直接将属性和方法赋值给this对象,还没有Return语句(Return obj)。这些没有的东东在使用构造函数创建对象的时候是后台自动运行的,是不是很省劲儿?
   5、构造函数与普通函数的区别

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

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

   四种声明创建对象的方式层层递进,都是伴随着问题的升级而出现的,在这里我想到了金庸小说里的一句话“英雄是随着时代产生的”,映射到对象创建这个问题上来,方法是伴随着问题产生的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

《JavaScript》——面向对象与原型

标签:web开发   javascript   

原文地址:http://blog.csdn.net/zhoukun1008/article/details/47334209

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!