代码改变世界

javascript与OOP

2010-01-09 15:13  花晓霜  阅读(496)  评论(0编辑  收藏  举报

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 Son(){}
//建立原型链
Bridge.prototype = Father.prototype;
Son.prototype = new Bridge();
//正确指定constructor
Son.prototype.constructor = Son;

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

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

Father.prototype.say = function(){}
var son = new Son();
son.say();
Son.prototype.sayOk = function(){}
son.sayOk();

实现接口

利用JavaScript的call或apply方法

classA.method.apply(classB, arguments);

3. 多态

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

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

 

转自:http://www.bgscript.com/archives/725