标签 ‘javascript面向对象’

不要再折腾JavaSciprt 实现 OOP

十二月 19th, 2009 由 Rock 发表

OOP三个代表:

1. 封装

JavaScript支持

对象数据结构: { attributeName : attributeValue }

对象属性公开访问

object.attributeName

目前JavaScript在属性访问封装上的缺陷:缺少自定属性getter与setter规则

object.attributeName.__defineGetter__ = function(){ return ..}
object.attributeName.__defineSetter__ = function(){ this.attributeName = ..}

成员反射

for (var key in object) …

2. 继承与接口

JavaScript支持

原型链实现继承

类表示:

function Class(){}

类实例化

var clazz = new Class();

常见的Object类实例:
var obj = {};

继承实现

父类
function Father(){}

//用于连接父子类原型链,现称为桥接类
function Bridge() {}

子类
function Sun(){}

//建立原型链
Bridge.prototype = Father.prototype;

Sun.prototype = new Bridge();

//正确指定constructor
Sun.prototype.constructor = Sun;

桥接类好处在于,修改子类原型并不会影响到父类原型

完成父子类关系构建后,以后可给父子类作扩展

Father.prototype.say = function(){}

var son = new Son();

son.say();

Sun.prototype.sayOk = function(){}

son.sayOk();

实现接口

利用JavaScript的call或apply方法

classA.method.apply(classB, arguments);

3. 多态

JavaScript本身支持的方法传递可变参数与泛型

function action(arg0, arg1, …, argN);