Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47605
  • 博文数量: 25
  • 博客积分: 851
  • 博客等级: 准尉
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-15 20:46
文章分类

全部博文(25)

文章存档

2011年(16)

2010年(9)

我的朋友

分类: 系统运维

2011-05-09 11:26:37

    最新学习了《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等方法,所以每个内部对象和自定义对象都是具有这些方法的。
阅读(464) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~