`
cuitongxin
  • 浏览: 26556 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JavaScript 原理详解之类继承

    博客分类:
  • js
js 
阅读更多

/**

 * 主要讲述继承机制的实现问题

 * @author cuitongxin

 */

 

/**

 * 1、对象冒充的方式

 * 原理:

 * 构造函数使用this来给所有的属性和方法赋值,因为构造函数只是一个函数,所以是一个构造函数可以成为

 * 另一个对象的方法,然后在对象中像普通方法一样调用它,该构造方法就会把在它构造函数中定义的属性和方法传递给当前的对象,

 * 当前对象就拥有了构造函数中的所有属性和方法。

 * 注意:

 * 对象中新的属性和方法,要在delete之后定义。

 * 该种继承方式支持多继承的形式。

 */

function ClassA (sdf) {

this.ss = sdf;

this.showMsg = function() {

alert(this.ss);

};

}

function ClassB (tt) {

this.newMethod = ClassA;

this.newMethod(tt);

delete this.newMethod;

}

 

 

/**

 * 2、call 方法

 * 说明:它的第一个参数用作调用call的函数内的this对象所指的对象。其他的参数直接传递给调用call的函数自身。

 * 上例子中的代码可以简化为如下形式

 */

function ClassB (tt,ss) {

ClassA.call(this,tt);

this.ss = ss;

this.showMsg2 = function() {

alert(ss);

};

}

 

/**

 * 3、apply方法

 * 说明:该方法同样第一参数为this对象,第二个参数为传递给调用者的数组。

 * 实现的代码同上

 */

 

 

/**

 * 4、原型链

 * 说明:原型中的所有属性和方法都将被传递给该类的所有实例。

 * 注意:构造函数中没有参数。

 */

function ClassA () {

}

ClassA.prototype.ss = "ss";

ClassA.prototype.showMsg = function () {

alert(this.ss);

};

function ClassB () {

}

ClassB.prototype = new ClassA();

 

/**

 * 5、混合的方式: 原型链 / 冒充方法

 * 这样就不需要考虑原型链中不能带参数的情况了

 */


分享到:
评论

相关推荐

    JavaScript 继承 封装 多态实现及原理详解

    封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,...

    JS 类的创建继承 与 new原理实现

    JavaScript深入之创建对象的多种方式以及优缺点 js new一个对象的过程,实现一个简单的new方法 (一)类的创建 1. 工厂模式 function createPerson(name){ //原料: var obj=new Object(); //加工: obj.name=name...

    基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解

    其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。因为构造函数只是一个函数,所以可使 ClassA 构造函数成为 ClassB 的方法,然后调用它。ClassB 就会收到 ClassA 的构造...

    javascript 设计模式之组合模式原理与应用详解

    本文实例讲述了javascript 设计模式之组合模式原理与应用。分享给大家供大家参考,具体如下: 组合模式说明 组合模式用于简单化,一致化对单组件和复合组件的使用;其实它就是一棵树; 这棵树有且只有一个根,访问...

    基于JavaScript实现继承机制之原型链(prototype chaining)的详解

    如果用原型方式重定义前面例子中的类,它们将变为下列形式: 代码如下:function ClassA() {} ClassA.prototype.color = “blue”;ClassA.prototype.sayColor = function () { alert(this.color);}; ...

    Extjs学习笔记之八 继承和事件基础

    这里接口的意思是Observable实际上起了一个抽象类的作用,Extjs中有大量的组件都是继承自这个类的。...另外,博客园内还有一个写的很好的系列 JavaScript继承详解. 他主要是根据Douglas Crockford的两篇文章写的

    JS原型和原型链原理与用法实例详解

    它没有”子类”和”父类”的概念,也没有”类”(class)和”实例”(instance)的区分,全靠一种很奇特的”原型链”(prototype chain)模式,来实现继承。 Brendan Eich设计javascript之初是为了实现网页与浏览器...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    Django之CSRF原理详解 Django之中间件详解 Django之缓存实例详解 Django之信号 Django之Form组件验证 作业 第23周 主机管理项目需求分析 主机管理项目架构设计 主机管理项目初始构建 主机管理项目编写插件基类 ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    08 django模板之继承标签extend和添加标签include 第51章 01 数据库表与表之间的一对多多对多的关系 02 Django的ORM的概念 03 ORM对单表的增删改操作 04 ORM查询API 05 模糊查询之万能的双下换线 第52章 01 上节...

    blog-note:阳姐讲前端:一个野生程序媛的成长之路

    闭包原理详解 一文搞懂this 内存泄漏问题 原型和原型链 内置对象 对象和类 深拷贝和浅拷贝 原型和原型链 封装、多态、继承 多种继承方式 异步编程 宏任务和微任务 异步解决方案 手写Promise DOM BOM ajax 存储

    asp.net知识库

    运算表达式类的原理及其实现 #实现的18位身份证格式验证算法 身份证15To18 的算法(C#) 一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程回顾 9-30 2 javascript的闭包 js变量作用域 9-30 3 仿超级玛丽兄弟游戏制作 9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的...

    史上最全传智播客PHP就业班视频课,8月份视频

    9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程回顾 9-30 2 javascript的闭包 js变量作用域 9-30 3 仿超级玛丽兄弟游戏制作 9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的...

    亮剑.NET深入体验与实战精要2

    13.6.1 优先使用(对象)组合,而非(类)继承 478 13.6.2 针对接口编程,而非(接口的)实现 481 13.6.3 开放-封闭法则(OCP) 482 13.6.4 Liskov替换法则(LSP) 485 13.6.5 单一职责原则(SRP) 486 13.6.6 依赖...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程回顾 9-30 2 javascript的闭包 js变量作用域 9-30 3 仿超级玛丽兄弟游戏制作 9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的...

    亮剑.NET深入体验与实战精要3

    13.6.1 优先使用(对象)组合,而非(类)继承 478 13.6.2 针对接口编程,而非(接口的)实现 481 13.6.3 开放-封闭法则(OCP) 482 13.6.4 Liskov替换法则(LSP) 485 13.6.5 单一职责原则(SRP) 486 13.6.6 依赖...

    (全)传智播客PHP就业班视频完整课程

    9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程回顾 9-30 2 javascript的闭包 js变量作用域 9-30 3 仿超级玛丽兄弟游戏制作 9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    9-28 6 javascript类与对象 9-28 7 给对象指定成员函数 自定义工厂方法 9-30 1 课程回顾 9-30 2 javascript的闭包 js变量作用域 9-30 3 仿超级玛丽兄弟游戏制作 9-30 4 构造方法 对象的常用操作 9-30 5 面向对象的...

Global site tag (gtag.js) - Google Analytics