javascript面向对象技术基础(四)

作者:sdcyst 来源:javaeye 时间:2010-02-07 13:15:00 

类、构造函数、原型

先来说明一点:在上面的内容中提到,每一个函数都包含了一个prototype属性,这个属性指向了一个prototype对象(Every function has a prototype property that refers to a predefined prototype object  --section8.6.2).注意不要搞混了.

构造函数:

new操作符用来生成一个新的对象.new后面必须要跟上一个函数,也就是我们常说的构造函数.构造函数的工作原理又是怎样的呢?

先看一个例子:

function Person(name,sex) {    this.name = name;    this.sex = sex; } var per = new Person("sdcyst","male"); alert("name:"+per.name+"_sex:"+per.sex); //name:sdcyst_sex:male

下面说明一下这个工作的步骤:

开始创建了一个函数(不是方法,只是一个普通的函数),注意用到了this关键字.以前我们提到过this关键字表示调用该方法的对象,也就是说通过对象调用"方法"的时候,this关键字会指向该对象(不使用对象直接调用该函数则this指向整个的script域,或者函数所在的域,在此我们不做详细的讨论).当我们使用new操作符时,javascript会先创建一个空的对象,然后这个对象被new后面的方法(函数)的this关键字引用!然后在方法中通过操作this,就给这个新创建的对象相应的赋予了属性.最后返回这个经过处理的对象.这样上面的例子就很清楚:先创建一个空对象,然后调用Person方法对其进行赋值,最后返回该对象,我们就得到了一个per对象.

prototype(原型)--在这里会反复提到"原型对象"和"原型属性",注意区分这两个概念.
在javascript中,每个对象都有一个prototype属性,这个属性指向了一个prototype对象.

上面我们提到了用new来创建一个对象的过程,事实上在这个过程中,当创建了空对象后,new会接着操作刚生成的这个对象的prototype属性.

每个方法都有一个prototype属性(因为方法本身也是对象),new操作符生成的新对象的prototype属性值和构造方法的prototype属性值是一致的.构造方法的prototype属性指向了一个prototype对象,这个prototype对象初始只有一个属性constructor,而这个constructor属性又指向了prototype属性所在的方法(In the previous section, I showed that the new operator creates a new, empty object and then invokes a constructor
function as a method of that object. This is not the complete story, however. After creating the empty object,
new sets the prototype of that object. The prototype of an object is the value of the prototype property of its
constructor function. All functions have a prototype property that is automatically created and initialized when
the function is defined. The initial value of the prototype property is an object with a single property. This property
is named constructor and refers back to the constructor function with which the prototype is associated. this is why every
object has a constructor property. Any properties you add to this prototype object will appear to be properties of
objects initialized by the constructor. -----section9.2)

有点晕,看下面的图:

   

 

这样,当用构造函数创建一个新的对象时,它会获取构造函数的prototype属性所指向的prototype对象的所有属性.对构造函数对应的prototype对象所做的任何操作都会反应到它所生成的对象身上,所有的这些对象共享构造函数对应的prototype对象的属性(包括方法).

标签:JavaScript,面向对象,函数
0
投稿

猜你喜欢

  • FSO如何一行行地读取文件?

    2010-06-10 18:40:00
  • SQL Server用触发器强制执行业务规则

    2009-01-20 16:05:00
  • ASP程序中输出Excel文件实例一则

    2008-11-07 15:29:00
  • css命名及书写规范大全

    2008-05-24 08:52:00
  • oracle下巧用bulk collect实现cursor批量fetch的sql语句

    2009-03-04 10:43:00
  • oracle 删除重复数据

    2009-07-23 14:46:00
  • asp数组去重复和数组排序

    2008-10-30 12:51:00
  • WAP2.0网页设计中的交互细节

    2010-08-12 20:50:00
  • 用 prototype 定义自己的方法

    2010-03-17 20:44:00
  • SQL SERVER EXPRESS 常见问题及解决办法

    2008-09-13 19:07:00
  • 自适应内容高度的收缩与展开

    2007-09-24 14:38:00
  • 用asp实现读取文件的最后一行的代码

    2011-03-08 10:55:00
  • asp如何删除数据库中的表或索引?

    2010-06-26 12:23:00
  • asp如何在本地机器上创建缓存?

    2010-06-18 19:27:00
  • 细化解析:MySQL 数据库中对XA事务的限制

    2009-01-14 11:59:00
  • web 2.0设计指导之一:简单[译]

    2008-10-12 09:37:00
  • 跨浏览器的本地存储(一):userData behavior

    2008-08-05 18:13:00
  • sqlserver bcp(数据导入导出工具)一般用法与命令详解

    2012-07-11 15:56:39
  • IA学习笔记04:标签系统

    2009-09-22 14:40:00
  • 讲解MySQL数据库的数据类型和建库策略

    2008-12-17 14:39:00
  • asp之家 网络编程 m.aspxhome.com