这是该系列经验的第六篇,上篇经验写了实现JavaScript继承的几种方式(扩展Object对象,call/apply实现),现在继续介绍JavaScript实现继承的其它方法。
原型链继承
1
在JavaScript中,函数是对象,原型也是对象,通过原型可以实现对象的属性继承,JavaScript中的每个对象都包含一个prototype的内部属性,这个属性所对应的便是该对象的原型。
2
所以可以通过原型的方法,来实现继承的方式,只需要将子类的prototype属性指向父类,即可实现子类继承父类的属性和方法。
闭包实现
1
通过闭包的方式也可以实现继承。首先了解一下JavaScript的作用域。在早期的ES标准中,只有两种作用域,一个是全局作用域,另一个是局部作用域,简单区分来说就是函数外部定义的变量即为全局变量,函数内部定义的变量即为局部变量。
2
通常情况下,函数外部是限制访问函数内部的变量,变量在函数执行完毕后,占用的内存会得到释放,面向对象中的“封装”概念,可以使用函数的私有变量实现,这个私有属性,便是局部变量。如果让外部得以访问到函数的内部变量,这种方式便是“闭包”。
3
在函数内部,定义一个子函数,然后用子函数访问父函数的私有变量,执行完操作后,将子函数通过return 返回,这便是闭包,通过闭包,也可以得以实现继承。
4
闭包还可以帮助修改函数的上下文。在jQuery中,有封装一个bind方法,和即将要介绍的方法不是同一方法。通过闭包可以保证函数的上下文的一个绑定状态,保证其作用域绑定后不改变。
下一篇:Swift 功能编程浅析