日期:2014-05-16  浏览次数:20421 次

JavaScript 面向对象程序设计(下)——继承与多态

转自:CoolCode.CN

前面我们讨论了如何在 JavaScript 语言中实现对私有实例成员、公有实例成员、私有静态成员、公有静态成员和静态类的封装 。这次我们来讨论一下面向对象程序设计中的另外两个要素:继承与多态。

1 又是几个基本概念

为什么要说又呢? :D

在讨论继承时,我们已经列出了一些基本概念了,那些概念是跟封装密切相关的概念,今天我们要讨论的基本概念,主要是跟继承与多态相关的,但是它们跟封装也有一些联系。

1.1 定义和赋值

变量定义是指用

var a ;

这种形式来声明变量。

函数定义是指用

function a ( ... ) { ... }

这种形式来声明函数。

var a = 1 ;

是两个过程。第一个过程是定义变量 a,第二个过程是给变量 a 赋值。

同样

var a = function ( ... ) {} ;

也是两个过程,第一个过程是定义变量 a 和一个匿名函数,第二个过程是把匿名函数赋值给变量 a。

变量定义和函数定义是在整个脚本执行之前完成的,而变量赋值是在执行阶段完成的。

变量定义的作用仅仅是给所声明的变量指明它的作用域,变量定义并不给变量初始值,任何没有定义的而直接使用的变量,或者定义但没有赋值的变量,他们的值都是 undefined。

函数定义除了声明函数所在的作用域外,同时还定义函数体结构。这个过程是递归的,也就是说,对函数体的定义包括了对函数体内的变量定义和函数定义。

通过下面这个例子我们可以更明确的理解这一点:

alert ( a ) ;
alert ( b ) ;
alert ( c ) ;
var a = " a " ;
function a () {}
function b () {}
var b = " b " ;