算法-javascript自实现继承extend(单次继承原型对象和单次继承构造函数)

# 自实现继承(单次继承构造函数)

 //父类的构造函数
  function Father(name,age){
   this.name=name
   this.age=age
  }
  
  //父类的原型对象
  Father.prototype={
   constructor:Father,
   say:function(){
    console.log(‘i am ‘+this.name+‘ ,‘+this.age+‘ years old‘)
   }
  }
  
  //类继承:只继承父类模板,不继承原型对象(借用构造函数的方法实现继承)  
  //子类的构造函数
  function Child(name,age){
   //call apply 扩展父类模板使用范围
   Child.superClass.constructor.call(this,name,age)
  }

  function extend(sub,sup){
   //初始化:创建空函数,空模板和空原型对象
   var f=new Function()
   //空函数:只继承父类的原型对象
   f.prototype=sup.prototype
   //子类继承空函数,即可实现只继承原型对象,不继承构造函数
   sub.prototype=new f()
   //还原子类的原始构造器
   sub.prototype.constructor=sub
   
   //保存父类原型对象,作用1:解耦;作用2:便于获取父类的原型对象
   sub.superClass=sup.prototype
   
  }
  
  extend(Child,Father)
  var c1=new Child(‘li4‘,21)
  c1.say()
  
  console.log(Father.prototype.isPrototypeOf(c1))
时间: 2024-10-18 06:30:03

算法-javascript自实现继承extend(单次继承原型对象和单次继承构造函数)的相关文章

JavaScript中的面向对象编程,详解原型对象及prototype,constructor,proto,内含面向对象编程详细案例(烟花案例)

面向对象编程: 面向:以什么为主,基于什么模式 对象:由键值对组成,可以用来描述事物,存储数据的一种数据格式 编程:使用代码解决需求 面向过程编程: 按照我们分析好的步骤,按步骤解决问题 优点:性能比面向对象高,适合跟硬件联系很紧密的东西 缺点:没有面向对象那么容易维护,复用,扩展 面向对象编程: 把事务分解成一个个对象,然后由对象之间分工与合作,分工明确,每一个对象都是功能中心 面向对象特性:封装性.继承性 .多态性 封装性:将一个功能封装起来,小封装 将多个函数封装起来,整体封装起来形成一个

javascript模拟实现继承,继承一次父类模板和原型对象

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

javascript之对象(二)&amp;&amp; 继承问题

JavaScript的继承本质上是通过原型链来实现的,主要的模式有如下  1 原型链模式 //思想是根据每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型的内部指针. //问题是在于所有的实例都会共享同一份父类对象,因为所有子类的prototype只有一份,而也只有这一份去实例化了一个父类对象.也正是因为如此,造成子类不能给超类对象传参,因为这样会直接修改了这一份父类的实例. function SuperType() { this.property =

《JavaScript高级程序设计》第六章【面向对象的程序设计】 包括对象、创建对象、继承

一.理解对象 ECMAScript中有两种属性:数据属性和访问器属性. 二.创建对象 1. 工厂模式 使用简单的函数创建对象,为对象添加属性和方法,然后返回对象.这种方法后来被构造函数模式所取代. 2. 构造函数模式 可以创建自定义引用类型,可以像创建内置对象实例一样使用new操作符.但是它的每个成员都无法得到复用,包括函数. 但是这样说好像也不准确——如果是通过一个指针指向构造函数外部的函数的话,应该算是复用? 1 function Person(name,age){ 2 this.name

javascript 的 继承(一) 之 原型链继承

继承 继承是 OO语言中的一个最为人津津乐道的概念.许多 OO语言都支持两种继承方式:接口继承和实现继承. 接口继承只继承方法签名,而实现继承则继承实际的方法. 如前所述,由于函数没有签名,在 ECMAScript中无法实现接口继承.ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的. 1.原型链 ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法. 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 简单回顾一下构造函数.原型和实

JavaScript 原型对象和原型链

开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)的解释去描述.有一句话说的好:如果你不能把一个很复杂的东西用最简单的话语描述出来,那就说明你没有真正的理解.最近正在读<Javascript高级程序设计>,书中对原型对象和原型链的描述让我受益匪浅,下面仅用一个对比性的例子来说明. 我们经常会这么写 1 function Person () { 2 this.name = 'John'; 3 } 4 var person = new

《Javascript语言精粹》的学习(一).对象和函数

最近在学习小马和秦歌翻译的<javascript语言精粹>,果然如传闻般,里面的内容博大精深.有些章节所表达的意思往往需要看到后面的章节内容时才能够突然顿悟,因此,称这本书需要反复的去研究,真的名副其实.这两天看了对象和函数这两章,在这里把自己觉得需要关注的内容做一下笔记: ①对象常量中属性名的命名规范 记得刚开始学习对象常量的时候,觉得它真的很简便.一个对象名,一个大括号,N个“名/值”对,OK,搞定!可是在学习的过程中,也遇到过一些疑惑,比如在一些JS书籍中,在写对象常量时,对象中有的属性

javascript -- 原型对象

原型对象: 每个对象都有一个参考对象,这个参考对象称之为原型对象.原型对象有自己的属性和方法.当A是B的原型对象时,那 么B拥有A中的所有属性和方法. 原型对象的工作原理: 使用原型对象定义一个新的对象时,该对象不会立即拥有原型对象的属性和方法,在调用的时候本对象内部没有的属性和方法是才回去调用原型中的属性和方法.(动态分配). 原型对象的引用: 在javascript中每一个函数都定义了一个prototype属性用于引用原型对象. Js代码 1 function computer(){ 2 3

构造函数、原型对象、继承

构造函数 构造函数就是我们用new创建对象时调用的函数.到目前为止,我们已经学过好多内置的构造函数了,例如,Object,Array和Function.使用同一个构造函数创建的对象都具有相同的属性和方法.除了这些内置的构造函数外,我们也可以创建自己的构造函数. 构造函数也是函数,和普通函数的定义方式一样.唯一的区别是构造函数名的首字母应该大写,以此区分于其他函数.下面定义了一个空的Person函数. function Person() { } 定义好构造函数以后,你就可以用它来创建对象了,例如,