免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1150 | 回复: 0
打印 上一主题 下一主题

理解JavaScript的面向对象特性 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:44 |只看该作者 |倒序浏览
    最新学习了《Professional JavaScript for Web Developers》第二版。终于对JavaScript中的面向对象特性有了一定的认识。
    这篇文章主要是自己的一些心得体会,可能有错误的地方,还望多多指点。
    其实JS和我们平时的OO语言(C++,Java,PHP等等)有很大的区别,从本质上来说JS是一种面向函数的语言,函数在JS中的地位是很高的,可以说是一级公民。在Java等传统的OO语言中,类才是一级公民。把这一点搞清楚,才能对JS有深入的了解。
    在JS中,其实没有类的概念。只有原型的概念,原型是什么了?我还没有搞清楚。可以将原型理解为对象,JS中的面向对象的特性(抽象、封装、继承、多态)其实是在对象的范畴中实现的。由于没有类的概念,所以在实例化一个对象时,是通过对象的原型来实现的。代码如下:
  1. function Person(){
  2.     this.name = "tom";
  3.     this.age = 12;
  4. }

  5. var instance = new Person();
    上面的代码实例化了一个Person对象,可以看到,“声明原型”(自创的术语:()使用的是函数,也可以认为声明一个类的过程就是声明一个构造函数的过程。在JS中,当创建一个函数时(一般情况首字母大写,可以看作是一个原型的申明),系统(指JS解析器)会为之创建一个原型,函数的prototype属性指向系统创建的原型。在实例化一个对象时,系统会为对象添加__proto__属性,这个属性指向系统创建的原型。示意图如下:

   
    在JS中,实现继承的机制是原型链,比如如下的代码:
  1. function Person(){
  2.     this.name = "tom";
  3.     this.age = 12;
  4. }
  5. function ChildPerson(){
  6.     this.toy = "duck";
  7. }
  8. //实现继承
  9. ChildPerson.prototype = new Person();
  10. var childInstance = new ChildPerson();
  11. var instance = new Person();
    上面的代码可以如下图解释:

    按照这种继承方式,就可以明白JS内部对象其实都是继承自Object的原型了。由于Object的原型含有toString,toLocalString,valueOf等方法,所以每个内部对象和自定义对象都是具有这些方法的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP