JavaScript:面向对象编程的模拟实现方法(一)

JavaScript本身是一门基于对象的语言,就是说这门语言本身存在对象的概念,但是它是不满足面向对象的三大基本特征的。不过语言是死的,代码是活的,我们还是可以使用一些方法来模拟JavaScript的面向对象开发的。

三大特征

面向对象的三个特征是继承,封装,多态。使用JavaScript语言本身提供的特性和一些技巧,我们基本上能够模拟这三大特征。有通过原型或构造函数等多种方式来模拟继承;可以使用闭包的方式在构造函数内部定义私有变量来模拟封装;至于多态,已经用不着模拟了,因为JavaScript是一门动态语言,所有的变量都不会声明类型,可以随时指向不同的对象,如果先指向父类后指向子类,则会调用子类的方法。因此可以默认认为JavaScript是支持多态的。

创建对象的方法

1.1. 工厂模式


  无法识别对象类型。

1.2. 构造函数模式

  每个方法都要在每个实例上重新创建一遍,内存占用是个问题。

1. 3. 原型模式

 

  类中的属性是被所有的实例共享的,修改一个,则会影响其他的每一个。没有构造函数的初始化过程。

1. 4. 组合使用构造函数模式和原型模式

  认同度最高的一种方法。

1. 5. 动态原型模式

  与组合模式相比,只是看起来更像个类而已。

1. 6. 寄生构造函数模式

  无法使用instanceof来确定对象类型。

1. 7. 稳妥构造函数模式

  同寄生构造函数模式,instanceof无效。


继承的方法

2.1. 原型链

  父类的实例属性成为了子类的原型属性,因此这些属性将被所有的子类实例共享。

2. 2. 借用构造函数

  每个方法都要在每个实例上重新创建一遍,内存占用是个问题。

2. 3. 组合继承(原型链和借用构造函数)

  最常用的继承模式。instanceof和isPrototypeOf()也可以正常使用。

2. 4. 原型式继承

  同原型链模式,引用的属性将被所有的子类实例共享。

2. 5. 寄生式继承

  无法做到函数复用。

2. 6. 寄生组合式继承

  普遍认为的引用类型最理想的解决范式。


参考资料

1.  JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
   http://www.jb51.net/article/18254.htm
2.  javascript constructor 详解
   http://hi.baidu.com/maxwin2008/blog/item/8da86102c1ceda034bfb51a3.html
3.  Douglas Crockford的网站
   http://www.crockford.com/
4. Object-Oriented Javascript
   http://nefariousdesigns.co.uk/archive/2006/05/object-oriented-javascript/
5. JavaScript高级程序设计(第2版)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值