对JavaScript面对对象#继承的理解
来源:互联网 发布:淘宝50字通用好评 编辑:程序博客网 时间:2024/04/29 06:16
前期看到一篇高手写的文章<悟透JavaScript>,文章非常棒,读了好几遍。
记下自己对JavaScript#OOP这块的感悟,其实重要的点就两个,一个是结构,一个是数据,如果还有第三个那就应该是规则定义或约束。
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>对OO的感悟</title><script type="text/javascript" language="JavaScript1.5">/** * 考虑JavaScript构造继承体系,是否可依据用途定义出两种对象 * <p>1、结构对象,负责描述具体数据对象的结构,类似Java中的类 * <p>2、数据对象,是JavaScript对象,包含结构对象定义的结构,包含独立的数据,类似Java中的类实例 *///根对象var OBJECT = {isA:function(e) {var currType = this;while (currType) {if (currType == e.P_TYPE) {return true;}currType = currType.P_TYPE;}return false;}};/** * 构造类继承体系 * <p>实现原理: * <p>1、利用prototype原型链绑定父类结构对象,使得子类继承了父类结构</p> * <p>2、增加P_TYPE标识用于标识当前对象父类</p> * <p>3、为最终子类结构对象复制属性</p> * </p> * <p>基础知识: * <p>1、需要理解var tmpObj = new FunctionName(){}的意义</p> * <p>1.1、new Object();</p> * <p>1.2、FunctionName.apply(this),构造函数的责任是用来搞初始化的</p> * <p>1.3、tmpObj = this = 1.1构造的new Object()</p> * <p>2、prototype,JavaScript只有对象继承链,没有类继承链</p> * </p> * @param baseClass 基类结构对象 * @param newClass 临时子类结构对象 * @return 最终子类结构对象 */function CLASS(baseClass, newClass) {function _innerFunc() {this.P_TYPE = baseClass;for (var member in newClass) {this[member] = newClass[member];}}_innerFunc.prototype = baseClass;return new _innerFunc();}/** * 依据结构对象构造数据对象 * <p>实现原理: * <p>1、定义实例 对象初始化责任(需要有CREATE方法)</p> * <p>2、注意原型链搜索路径,加入了对象结构对象</p> * </p> */function NEW(obj, param) {function _innerFunc() {if (obj.CREATE) {obj.CREATE.apply(this, param);}}_innerFunc.prototype=obj;return new _innerFunc();}function doTest() {//类结构对象var Person = CLASS(OBJECT, {CREATE:function(name, age) {this.name = name;this.age = age;},sayHello:function() {console.log(this.name + ":" + this.age);}});var Employee = CLASS(Person, {CREATE:function(name, age,salary) {this.P_TYPE.CREATE(name, age);//super(name,age)this.salary = salary;},showSalary:function() {console.log(this.name + ":" + this.age + ":" + this.salary);}});//类数据对象var person = NEW(Person, ['小C', '20']);person.sayHello();var employee = NEW(Employee, ['小D', '20', '$200']);employee.showSalary();}</script></head><body><input type="button" value="doTest" onclick="doTest();"/></body></html>
- 对JavaScript面对对象#继承的理解
- 面对对象和面对过程的理解
- 说说我对面对对象的理解
- 面对对象的继承
- 第一次写的javascript脚本,对其面对对象的理解和认识
- 面对对象的javascript
- javascript面对对象编程 之继承
- JavaScript对寄生组合式继承的理解
- 对javascript封装,继承的理解
- Javascript对象和原型继承的理解
- JavaScript对工厂模式、构造函数、原型、字面量方式、继承、对象冒充的理解
- Javascript的面对对象的理解 【上】(prototype,函数和对象等概念)
- 面对对象之继承
- 对javascript面向对象的理解
- 关于对JavaScript面向对象的理解
- 对javascript中arguments对象的理解
- 说说对 JavaScript 对象的理解
- JavaScript中对Promise对象的理解
- 标准化与先进生产力
- Tomcat研究之组件结构
- 单片机之旅——串口、8*8点阵
- 用UDEV服务解决RAC ASM存储设备名
- omcat研究之ClassLoader
- 对JavaScript面对对象#继承的理解
- Find whether a given number is a power of 4 or not
- Extjs 学习总结
- Android动画学习笔记-Android Animation
- Android 应用程序之间数据共享—ContentResolver
- Mac上锁屏的快捷键设置
- ArcGIS Server REST API(收藏教程)
- 单片机之旅——拓展的IO接口8255A
- Turn off the rightmost set bit