JavaScript面向对象(2)——创建对象的工厂模式与构造函数模式
2017-06-25 21:41
776 查看
虽然Object构造函数和对象字面量都可以用来创建单个对象,但是当我们创建多个对象的时候就会产生大量的重复代码。例如: var user1={ uname:"jack", age:17, SayHello:function () { alert("Hello,my name is: "+this.uname+".I'm "+this.age+" years old."); } } var user2={ uname:"tom", age:18, SayHello:function () { alert("Hello,my name is: "+this.uname+".I'm "+this.age+" years old."); } } var user3={ uname:"rose", age:16, SayHello:function () { alert("Hello,my name is: "+this.uname+".I'm "+this.age+" years old."); } } 为了解决创建多个相似对象产生大量重复代码的问题,我们可以使用工厂模式。在javascript中我们可以将创建对象的过程进行抽象,用函数来封装以特定接口创建对象的细节。上面的代码可以这样改写: function createUser(name,age) { var obj = new Object(); obj.uname=name; obj.age=age; obj.SayHello=function(){ alert("Hello,my name is: "+this.uname+".I'm "+this.age+" years old."); }; return obj; } var user1= createUser("jack",17); var user2=createUser("tom",18); var user3=createUser("rose",16); 工厂模式解决了创建多个相似对象的问题,但是却没有解决对象识别的问题。因为这样创建的对象都是Object类型。Object是原声的构造函数,我们也可以自定义构造函数,从而定义自定义对象类型的属性和方法。我们将上面的例子进行修改,代码如下: function User(name,age) { this.uname=name; this.age=age; this.SayHello=function(){ alert("Hello,my name is: "+this.uname+".I'm "+this.age+" years old."); }; } var user1= new User("jack",17); var user2=new User("tom",18); var user3=new User("rose",16); function Student() { }; user1.SayHello(); alert(user1 instanceof Object); alert(user1 instanceof User); alert(user1 instanceof Student); 我们可以看到,使用构造函数模式与使用工厂模式在创建对象时有如下区别: 1,没有显示创建对象 2,直接将属性和方法赋值给this对象 3,没有return语句 此外,按照约定,构造函数名,首字母要大写。创建User的新实例时,需要使用new关键字。 而通过instanceof函数,我们可以看到user1属于Object类型,也属于User类型,但是不属于Student类型。因此构造函数模式即解决了创建多个相似对象的问题,又解决了对象识别的问题。 虽然构造函数模式很好,但是要知道,javascript中,函数也是对象。实际上我们每次创建对象时都会再创建一个SayHello方法。下面这段代码时等价的。 this.SayHello=function(){ alert("Hello,my name is: "+this.uname+".I'm "+this.age+" years old."); }; this.SayHello= new Function{ alert("Hello,my name is: "+this.uname+".I'm "+this.age+" years old."); }; 而创建两个相同任务的Function实例的确是没有必要的,如果将SayHello这个方法抽离出来,作为全局函数,又会带来新的问题。怎么办呢?留给大家思考。
相关文章推荐
- JavaScript高级程序设计之面向对象的程序设计之创建对象之工厂模式第6.2.1讲笔记
- Javascript之创建对象(工厂模式与构造函数模式)
- JavaScript高级程序设计之面向对象的程序设计之创建对象之组合使用构造函数模式和原型模式 第6.2.4讲笔记
- JavaScript高级程序设计之面向对象的程序设计之创建对象之寄生构造函数模式 第6.2.6讲笔记
- JavaScript中创建对象的方法:工厂模式,构造函数模式, 原型模式
- Javascript之创建对象(工厂模式与构造函数模式)
- JavaScript高级程序设计之面向对象的程序设计之创建对象之 构造函数模式第6.2.2讲笔记
- javascript工厂模式和构造函数模式创建对象方法解析
- JavaScript高级程序设计之面向对象的程序设计之创建对象之稳妥构造函数模式 第6.2.7讲笔记
- 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)
- javascript创建对象之稳妥构造函数模式(七)
- JavaScript构造函数及原型对象 使用Object或对象字面量创建对象 工厂模式创建对象 构造函数模式创建对象 原型模式创建对象 构造与原型混合模式创建对象
- 面向对象 - javascript创建对象模式总结
- JavaScript构造函数及原型对象 使用Object或对象字面量创建对象 工厂模式创建对象 构造函数模式创建对象 原型模式创建对象 构造与原型混合模式创建对象
- javascript创建对象——组合使用构造函数和原型模式
- javascript面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
- javascript创建对象之工厂模式(一)
- javascript创建对象之构造函数模式(二)
- js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
- JavaScript进阶系列03,通过硬编码、工厂模式、构造函数创建JavaScript对象