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

【JavaScript】面向对象

2016-12-14 20:14 274 查看

前言

  JavaScript是面向对象的脚本语言,但是没有其他面向对象语言(如:C#)中的类的概念。

创建一个对象,并赋予这个对象属性和方法

var box=new Object();     //创建一个Object对象
box.name='Ju';            //创建一个name属性并赋值
box.age=22;               //创建一个age属性并赋值
box.run=function(){       //创建一个run()方法并返回值
return this.name + this.age + '运行中......';
};
alert(box.run());         //输出属性和方法的值




利用工厂创建多个类似的对象

  如果我们要创建另外一个对象,只是把box改成box2的话,就会有很多冗余的代码,为了解决代码冗余的问题,我们引入了工厂的概念。代码如下:

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('Ju',22);          //第一个实例
var box2=createObject('Micheal',23);     //第二个实例
alert(box1.run());
alert(box2.run());                       //保持独立


工厂模式解决了重复实例化的问题。



利用构造函数创建特定的对象

  工厂模式解决了重复实例化代码冗余的问题,不过仍存在对象的识别问题。上面代码汇总box1和box2的类型返回值都是Object,不容易区分。

  



  

聪明的人们总是有解决办法的,构造函数出现了。代码如下:

function Box(name,age){             //构造函数模式
this.name=name;
this.age=age;
this.run=function(){
return this.name + this.age + '运行中......';
}
}
var box1=new Box('Ju',22);     //new Box()即可
var box2=new Box('Micheal',23);
alert(box1.run());
alert(box1 instanceof Box);       //很清晰的识别他从属于Box




  构造函数即解决了重复实例化代码冗余的问题,又解决了对象识别的问题。与工厂模式的不同之处在于:①构造函数没有显式的创建对象(new Object());②直接将属性和方法赋值给this对象;③没有return语句。

  

构造函数的一些规范

  1.函数名和实例化构造名相同且大写(Box)

  2.通过构造函数创建对象,必须使用new运算符(工厂模式没有用new)

构造函数创建对象过程

  通过构造函数可以创建对象,那么这个对象是哪里来的,new Object()在什么地方执行了?执行过程如下:

  1.当使用了构造函数,并且new构造函数,那么就后台执行了new Object();

  2.将构造函数的作用域给新对象,(即new Object()创建出的对象),而函数体内的this就代表new Object()出来的对象;

  3.执行构造函数内的代码;

  4.返回新对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: