多语言展示
当前在线:571今日阅读:19今日分享:20

JavaScript高级程序设计笔记:[1]创建对象

使用Object构造函数或者对象字面量都可以用来创建单个对象,但是创建多个对象时,效率未免太低。以下总结三种JavaScript创建对象的方式。
方法/步骤
1

1、工厂模式工厂模式是软件工程领域广为人知的设计模式,这种模式抽象了创建具体对象的过程。下面是使用工厂函数创建对象的的一个例子。

2

2、构造函数

3

从上面的例子中,我们看到构造函数与工厂函数不同之处:1、没有显式的创建对象2、直接将属性和方法赋给了this对象3、没有return语句另外,函数名Person使用了首字母大写。(这是一个惯例,构造函数始终都应该以一个大写字母开头,而非构造函数应该以一个小写字母开头。)使用构造函数来创建对象,意味着你可以获取对象的类型。这也正是构造函数胜过工厂模式的地方。检测对象类型,常用instanceof操作符。

4

我们使用构造函数创建的两个对象person1和person2,既是Person对象的实例,也是Object对象的实例。这是因为,所有对象都间接或直接继承自Object。使用构造函数的主要问题,就是每个方法都要在每个实例上重新创建一次,这是没有必要的。通过把方法的定义转移到构造函数外部来解决这个问题。可以通过使用原型模式来解决这个问题。

5

3、原型模式我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,也就是原型对象。使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法。

6

我们可以看到,person1和person2共享了他们的原型对象的属性和方法。也就是说,person1和person2访问的是同一组属性和同一个方法。上面的person1和person2实例都叫Jason,我们本打算person1叫Jason,person2叫Poppy的,该怎么做?

7

上面的例子可以看到,person2的信息被改过来了,是我们想要的。为什么?当为对象实例添加一个属性时,这个属性就会屏蔽原型对象中保存的同名属性;注意,是屏蔽,原型对象中的同名属性并没有发生改变。

8

4、更简单的原型语法你可能注意到了,前面例子中每添加一个属性和方法就要敲一次Person.prototype。更好的做法是用一个包含所有属性和方法的对象字面量来重写对象原型,如下所示。要注意的是,重写之前和重写之后new出来的对象实例,其实指向了不同的对象原型。

9

额外包含了一个constructor: Person,是因为通过字面量形式创建的对象会自动获得constructor属性,而这个属性没有指向Person函数。

推荐信息