在Design Patten For Java中,关于Prototype原型对象的设计需求是这样的。
The Prototype Pattern copies or clones an existing class rather than creating a new instance when creating new instances is more expensive.
当创建类的实例,如果需要花费较多的时间或者创建方式上较为复杂,这个时候可以考虑将原始对象进行拷贝,进行适合的修改以适应需求。
以上是Java中的定义,JavaScript不同的是,prototype是函数的一个内置的原型对象,是类的成员的集合。当通过new操作符来获取一个类的对象时,prototype对象的成员都会成为实例化对象的成员。
看一个简单的例子,
执行new操作符创建对象的过程:
(1) 创建一个新的对象,并让this指针指向它。
(2) 将函数的prototype对象的所有成员都赋给这个新的对象
(3) 执行函数体,对这个对象进行初始化操作;
(4) 返回(1)中创建的对象。
与上一篇手稿相比,多了用prototype对象来初始化对象的过程。引入了prototype对象之后,我们就可以采用一种更为简洁的类定义方式。
如果说上面的方式是简洁的,那么还不如采用如下的方式进行定义。
以无类型对象的方式来定义类成员,使得成员以列表的方式显示,更为简洁。值得注意的是,如果在上述定义的方法method2中,要引用属性prop2,必须通过this指针来引用,因为JS中每个方法和属性都是独立的,要通过this指针来联系到某一个对象上。
这种定义类的方式可以看做是JavaScript的一种固定模式,这样在使用中才会更加容易理解。To be continue......