创建对象
一、工厂模式
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 0; } var person1 = createPerson("Nicholas","29","Software Engineer"); var person2 = createPerson("Greg","27","Doctor");
工厂模式存在的缺陷是无法解决对象识别的问题。因此出现了构造函数模式
二、构造函数模式
创建自定义的构造函数,从而自定义对象类型的属性和方法。以上代码重写如下:
function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }; } var person1 = new Person("Nicholas","29","Software Engineer"); var person2 = new Person("Greg","27","Doctor");
任何函数,只要通过new操作符来调用就可以作为构造函数。构造函数的缺点是每个方法都要在每个实例上重新创建一遍。
三、原型模式
function Person(){ } Person.prototype.name = "Nicholas"; Person.prototype.age = 29; 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"
将sayName( )方法和所有属性直接添加到了Person的prototype属性中,构造函数变成空函数。任然可以通过调用构造函数在创建新对象,而且新对象还会具有相同的属性和方法。但与构造函数模式不同的是,新对象的这些属性和方法是由所有实例共享的。
时间: 2024-10-20 02:09:35