1、工厂模式
考虑到javascript无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节
<script type="text/javascript"> function createPerson(name,age,job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(this.name); }; return o; } var person1 = createPerson("zy","21","web devoloper "); var person2 = createPerson("smirk","21","UI "); person1.sayName(); person2.sayName(); </script>
工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)
2、构造函数模式
javascript中的构造函数可用来创建特定类型的对象,可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。
<script type="text/javascript"> function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }; } var person1 = new Person("zy","21","web devoloper "); var person2 = new Person("smirk","21","UI "); person1.sayName(); person2.sayName(); </script>
按照惯例,构造函数始终都应该以一个大写字母开头。
以这种方式调用构造函数实际上会经历一下四个步骤:
(1)创建一个新对象;
(2)讲构造函数的作用域赋给新对象
(3)执行构造函数中的代码(为这个新对象添加属性)
(4)返回新对象
前面例子的最后,person1和person2分别保存着Person的一个不同的实例,这两个对象都有一个constructor属性,属性指向Person
alert(person1.constructor == Person);