小兔网

探讨一下面向对象中的几个概念:1.一切事物皆对象,2.对象具有封装和继承特性,3.对象与对象之间使用消息通信,各自存在信息隐藏。

1、工厂模式

ECMAScript 可以通过工厂模式来创建对象:


//工厂模式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 obj1 = createObject('Lee', 100);          //创建第一个对象var obj2 = createObject('Jack', 200);          //创建第二个对象//alert(obj1.run());                          //打印第一个对象实例的run()方法//alert(obj2.run());                          //打印第二个对象实例的run()方法//alert(typeof obj1);//alert(typeof obj2);alert(obj1 instanceof Object); //truealert(obj2 instanceof Object); //true

通过工厂模式创建的对象,解决了重复实例化问题,但对象识别问题无法解决(所有对象均是Object),因此要想解决对象识别问题,我们采用下面的构造函数。

2、构造函数


//构造函数创建function Person(name,age){  //所有构造函数对象都是Object  this.name=name;  this.age=age;  this.run=function(){    return this.name+this.age+"ing...";  };};var person1=new Person('zhu1',100);var person2=new Person('zhu2',200);alert(person1.run());alert(person2.run());alert(person1 instanceof Object); //turealert(typeof person2);         //Personalert(person2 instanceof Person);  // truevar person3=new Object();Person.call(person3,'zhu3',300);//对象冒充,person3是Object类型,冒充Person类型alert(person3.run());

构造函数中this:代表当前作用域对象的引用,如果在全局范围this代表window对象,如果在构造函数体内,就代表当前构造函数所声明的对象。

构造函数方法,及解决了重复实例化问题,有解决了对象识别问题,对比跟工厂方法不同之处可知:

1.构造函数方法没有显示的创建对象(new Object());

2.直接将属性和方法值赋值给this;

3.没有return 语句;

4.但是使用构造函数创建必须使用new运算符;

以上就是JavaScript如何用工厂模式和构造函数来创建对象?的知识。速戳>>知识兔学习精品课!