[资源帖]JavaScript中的对象、函数和继承
jsp吧
全部回复
仅看楼主
level 8
1、 Javascript中的对象
  JavaScript可以说是一个基于对象的编程语言,为什么说是基于对象而不是面向对象,因为JavaScript自身只实现了封装,而没有实现继承和多态。既然他是基于对象的,那么我们就来说说js中的对象。有人说js中所有的都是对象,这句话不完全正确。
正确的
一方是他强调了对象在js中的重要性,对象在js中无处不在,包括可以构造对象的函数本身也是对象。但是另一方面,js中也有一些简单的数据类型,包括数字、字符串和布尔值、null值和undefined值,而这些不是对象。那为什么这些类型的值不是对象呢,毕竟他们也有方法。那让我们来看一下,JavaScript中对于对象的定义,有两种定义。
  (1)JavaScript中的对象是可变的键控集合(keyed collections) (此定义来自老道的那本书的第三章)
  (2)JavaScript中的对象是无序(unordered)的属性集合,这些属性可以含有简单的数据类型、对象、函数;保存在一个对象属性中的函数也被称为这个对象的方法。 (来自ECMA-262 的4.3.3)(注:这里所说的属性是可以在js脚本中创建和访问的(我们称之为显性属性),不包括系统为对象自动分配的内部属性)
  那为什么那个简单的数据类型不是对象呢,主要是因为这些数据类型的值中拥有的方法是不可变的,而一个对象的属性是应当可以被改变的。
  2、 对象中的原型链[[proto]]
  JavaScript中的每个对象创建的时候系统都会自动为其分配一个原型属性[[proto]],用来连接到他的原型对象。在JavaScript中就是通过每个对象中的[[proto]]来实现对象的继承关系的。但是对象的[[proto]]属性在JavaScript是不能访问和修改的,他是作为一个内部的属性存在的,而且是在对象被创建的同时由系统自动设定的。
  当访问一个对象的某一属性,如果这个属性在此对象中不存在,就在他的[[proto]]所指的原型对象的属性中寻找,如果找到则返回,否则继续沿着[[proto]]链一直找下去,直到[[proto]]的连接为null的时候停止。
  3、 函数也是对象
  JavaScript中的函数本身就是一个对象(所以我们经常称之为函数对象),而且可以说他是js中最重要的对象。之所以称之为最重要的对象,一方面他可以扮演像其他语言中的函数同样的角色,可以被调用,可以被传入参数;另一方面他还被作为对象的构造器(constructor)来使用,可以结合new操作符来创建对象。
  既然函数就是对象,所以必然含有对象拥有的全部性质,包括对象在创建时设定的原型链[[proto]]属性。
  让我们来看看函数对象和普通对象有什么区别。我们前面说过,对象就是无序的属性集合,那么函数的属性和普通对象的属性有什么不同呢。根据ECMA-262中的13.2节所述,在函数对象创建时,系统会默认为其创建两个属性[[call]]和[[constructor]],当函数对象被当做一个普通函数调用的时候(例如myFunc()),“()”操作符指明函数对象的[[call]]属性就被执行,当他被当做一个构造器被调用的时候(例如new myConst()),他的[[constructor]]属性就被执行,[[cosntructor]]的执行过程我们将在下一节中介绍。除此之外,当一个函数被创建时,系统会默认的再为其创建一个显示属性prototype,并为其赋值为
  this.prototype = {constructor:this}
  具体内容可以参加老道的那本书的第五章。这个函数对象的prototype属性也是为了js把函数当做构造器来实现继承是准备的,但是这个属性是可以在js脚本中访问和修改的。在这里要强调的一点是,大家一定要区分对象中的[[proto]]属性和函数对象中的prototype属性,我在刚开始学习的时候就是因为没有很好的区分这两个东西,走了很多的弯路。
2015年09月09日 02点09分 1
level 8
这么详细
2015年09月11日 11点09分 2
level 8
没人看
2015年09月12日 02点09分 3
level 8
[大拇指]
2015年09月12日 10点09分 4
level 8
扣扣 21143868
2015年09月13日 02点09分 5
level 8
同意
2015年09月13日 14点09分 6
level 8
[呵呵]
2015年09月15日 09点09分 7
level 8
好哒
2015年09月16日 03点09分 8
level 8
在那
2015年09月17日 11点09分 9
level 8
来了
2015年09月18日 02点09分 10
level 8
长期
2015年09月18日 13点09分 11
level 8
[大拇指]一个!
2015年09月19日 02点09分 12
level 8
上来
2015年09月19日 11点09分 13
level 8
行啦
2015年09月20日 05点09分 14
level 8

2015年09月20日 13点09分 15
level 8
知道
2015年09月21日 13点09分 17
level 8

2015年09月22日 12点09分 18
level 8
gk
2015年09月23日 13点09分 19
level 8
bh
2015年09月24日 13点09分 20
level 8

2015年09月25日 09点09分 21
1 2 尾页