读书分享(JavaScript高级程序设计)_js对象创建的几种方式

工厂模式

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 createPerson = createPerson("Nicholas", 29, "Software Engineer");
alert(createPerson.name);
函数createPerson() 能够根据接受的参数来构建一个包含必要信息的Person对象,可以无数次地调用这个函数,而每次它都会返回一个包含三个属性一个方法的对象。工厂模式解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)

构造函数模式

构造函数可用来创建特定类型的对象,像Object和Array这样的原生构造函数,在运行时会自动出现在执行环境中。此外,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法,如下重新工厂模式例子:
function Person(name,age,job)
{
this.name = name;
this.age = age;
this.job = job;
this.sayName = function () {
alert(this.name);
};
}
var person = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg",27,"Doctor");

在这个例子中,Person()函数取代了createPerson()函数。以下是他们的不同点
1.没有显式地创建对象
2.直接将属性和方法赋给了this对象
3.没有return语句
要创建Person的新实例,必须使用new操作符,创建过程会经历以下四个步骤:
1.创建一个新对象;
2.将构造函数的作用域赋给新对象(因此this就指向了这个新对象)
3.执行构造函数中的代码(为这个新对象添加属性)
4.返回新对象

原型模式

每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。prototype就是通过调用构造函数而创建的那个对象实例的原型对象。使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法,也就是说不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中,
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

理解原型对象

创建一个新函数时,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象。在默认情况下,所有原型对象都会自动获取一个constructor(构造函数属性), 这个属性包含一个指向prototype属性所在函数的指针。

posted @ 2019-10-07 21:30  完美xtide  阅读(124)  评论(0编辑  收藏  举报