1、工厂模式: 用函数来封装以特定接口创建对象的细节
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("Nicholas",29,"Software Engineer"); var person2 = createPerson("Greg",27,"Doctor");
注!:工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(既怎样知道一个对象的类型)
2、构造函数模式:
function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = function () { alert(thisl.name); } } var person1 = new Person("Nicholas",29,"Software Engineer"); var person2 = new Person("Greg",27,"Doctor");
//以这种方式定义的构造函数是定义在Global对象(在浏览器中是window对象)中的。
与工厂模式的不同之处:
1、没有显式的创建对象;
2、直接将属性和方法付给了this对象;
3、没有return语句。
此外函数名Person首字母大写。按照惯例,构造函数始终都应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头;
注!:
1、构造函数本身也是函数,只不过可以用来创建对象而已;
2、构造函数和其他函数的唯一区别,就在于调用他们的方式不同。任何函数,只要通过new操作符来调用,那它就可以作为构造函数,否则和其它函数没什么区别,例如
//当作构造函数使用 var person = new Person("Nicholas",29,"Software Engineer"); person.sayName(); //"Nicholas //作为普通函数调用 Person("Greg",27,"Doctor"); //添加到window window.sayName(); //“Greg” //在另一个对象的作用域中调用 var o = new Object(); Person.call(o,"Kristen",25,"Nurse"); o.sayName(); //"Kristen"
3、原型模式:
function Person() { } Person.prototype.name = "Nicholas"; Person.prototype.age = 28; Person.prototype.job = "Software Engineer"; Person.prototype.sayName = function () { alert(this.name); }; var person1 = new Person(); person1.sayName(); //Nicholas var person2 = new Person(); person2.sayName(); //Nicholas alert(person1.sayName() == person2.sayName()) //true
浙公网安备 33010602011771号