JS面向对象的基础(二)

来源:互联网 发布:社交网络 百度云 编辑:程序博客网 时间:2024/06/09 18:02

     在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......