基于构造函数的继承
call方法
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明: call() 方法是与经典的对象冒充方法最相似的方法,它的第一个参数用作 this 的对象,其他参数都直接传递给函数自身。
apply方法
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
参考实例:
(function(){ //生物 function Biology(){ this.isBeing = true ; } //动物 function Animal(){ } Animal.prototype = new Biology() ; function Cat(){ // 此种方式只是单纯属性的继承,Cat不是Animal的子类 Animal.call(this); } var cat = new Cat() ; // 验证Cat不是Animal的子类 alert(cat instanceof Animal); alert("cat 是否具有Biology的属性 -> "+cat.isBeing); function Human(){ } // Human继承自Animal类,是Animal的一个子类 Human.prototype = new Animal() ; var human = new Human() ; alert(human instanceof Animal); alert("human 是否具有Biology的属性 -> "+human.isBeing); })() ;
不管是用call还是apply实现的继承,都是通过调用构造函数,改变执行构造函数的this对象,实现对象属性的填充。而当前类并不是父类的子类,并且不能继承父类原型中的属性和方法。
原型链方式的继承
通过设置构造函数的prototype的对象实例,当前类具有父类及其原型类中的所有属性和方法,但是prototype的函数实例的构造函数中的参数必须是固定的。类似于Java面向对象的继承。
参考实例
//使用原形链和构造函数的方式实现继承 (function(){ Function.prototype.extend = function(parent){ // 添加一个中间类,避免原型被污染 var MediumObj = function(){ }; // 根据函数参数构造父类 MediumObj.prototype = new parent(arguments[1]) ; // 指定当前类的父类为MediumObj,这样如果this的实例化对象为父类添加或改变 // 属性首先是在MediumObj中对属性进行添加或修改,不影响parent,也就避免 // 修改parent的属性对this实例化对象的影响 this.prototype = new MediumObj() ; // 返回当前对象的构造函数 return this ; }; // 父亲 function Parent(name){ this.name = name ; this.money = "1w" ; } // 儿子,儿子不具有父亲的money,但是我们要实现父亲的money就是child的money function Child(name){ this.name = name ; }; // 只有有父母的孩子才是宝 var FullChild = Child.extend(Parent,"baba") ; // 创建child实例 var child = new FullChild("child"); // child具有父亲的属性 alert(child.name +" "+child.money); // child是Child对象,也是Parent对象 alert((child instanceof Child)+" "+(child instanceof Parent)); })() ;
在遍历类对象过程中,不仅会遍历对象的属性,也会遍历prototype中属性和方法。
相关推荐
根据提供的文件信息,我们可以分析并总结出关于JavaScript继承的一些关键知识点。尽管提供的代码示例主要关注于使用jQuery插件初始化一个表格(grid),但这里我们将重点放在如何在JavaScript中实现继承这一主题上。...
### JavaScript继承实现示例 #### 知识点概述 在JavaScript中,继承是一种常见的对象间关系,它允许一个对象(子类)继承另一个对象(父类或超类)的属性和方法。通过继承,可以复用代码、提高程序的可维护性,并...
JavaScript是Web开发中的核心语言,尤其在前端领域,它的作用不可或缺。其中,对象的继承机制是JavaScript..."JS继承笔记.md"文档可能对这些概念进行了详细解释,包括示例和最佳实践,是学习JavaScript继承的好资料。
JavaScript,作为一种基于原型的面向对象语言,其继承机制与传统的类继承有所不同。在JS中,对象可以直接通过原型链实现继承,而无需像Java那样使用`extends`关键字。本文档将探讨JavaScript中的继承实现方式及其优...
### JS继承的实现方式 JavaScript作为一种灵活且功能强大的编程语言,支持多种继承模式。下面将详细介绍几种常见的继承实现方式,并探讨它们的特点与应用场景。 #### 一、原型链继承 **核心思想**: 将父类的实例...
本篇文章将深入探讨JavaScript继承的实例,以及如何通过继承来提高代码的可维护性和效率。 首先,我们需要了解JavaScript中的原型(prototype)机制。每个JavaScript对象都有一个内部属性[[Prototype]],通常通过`_...
在本章中,我们将分析Prototypejs中关于JavaScript继承的实现。 Prototypejs是最早的JavaScript类库,可以说是JavaScript类库的鼻祖。 我在几年前接触的第一个JavaScript类库就是这位,因此Prototypejs有着广泛的...
除了传统的原型链继承,JavaScript还支持其他继承模式,如组合继承(组合使用构造函数和原型链)、寄生继承(通过创建父类副本改进继承)、原型式继承(使用`Object.create()`)、寄生组合式继承(被认为是最有效的...
本文将深入探讨JavaScript继承的实现方式,以及其中的问题和解决方案。 首先,我们来看混合方式的实现,这种方式结合了原型链和对象冒充。在JavaScript中,构造函数是用于创建特定类型对象的函数。例如,`Employee`...
JavaScript继承机制研究 在本文中,我们将深入探讨JavaScript继承机制的实现方式,并对基于原型的继承、构造函数方式继承、组合继承、寄生式继承等继承机制进行了总结归纳和分析。 基于原型的继承 JavaScript是...
js没有特别明确的实现如何继承,但是能够通过特殊手段实现继承的,有四种方法
这里我们将深入探讨JavaScript继承的特性以及实践应用。 首先,JavaScript的继承基于原型链。每个对象都有一个`__proto__`属性,指向创建它的构造函数的原型对象。当试图访问对象的一个属性时,JavaScript会沿着...
JavaScript 继承之为什么要继承 JavaScript 中的继承机制是指子类继承父类的属性和方法,使得子类可以拥有父类的所有特征。继承是面向对象编程的基本机制之一,它可以实现代码复用、提高编程效率和增强代码的可维护...
这里我们主要探讨三种实现JavaScript继承的方式:原型链继承、构造函数继承和组合继承。 首先,原型链继承是JavaScript最常用的继承方式。在JavaScript中,每个函数都有一个prototype属性,这个属性是一个对象,它...
JavaScript 继承是面向对象编程中的关键概念,它允许创建基于现有对象的新对象,从而能够复用和扩展已有功能。本文将深入探讨JavaScript中的几种继承方式,包括它们的基本原理、优缺点以及适用场景。 首先,原型链...
本文将深入探讨JavaScript继承的六大模式:原型链、借用构造函数、组合继承、原型式继承、寄生式继承以及寄生组合式继承。 1. **原型链** 原型链是JavaScript中最基础的继承方式,通过原型对象的引用实现。每个...
1. **JavaScript继承** - **原理**:JavaScript的继承主要是通过原型链(prototype chain)来实现的。每个JavaScript对象都有一个内部属性[[Prototype]],通常可以通过`__proto__`访问,或通过`Object....
JavaScript继承机制探讨及其应用 JavaScript是一门弱类型语言,具有函数式编程和面向对象编程的特点。随着近几年JavaScript生态圈的发展和成熟,项目的编码量和复杂度也在呈几何级数增长。JavaScript面向对象编程中...