1、实现继承:原型链
        function extend1() {//父类型
          this.name = "张三";
        }
        function extend2(){ //子类型
          this.age =18;
        }
        extend2.prototype = new extend1();//extend2继承了extend1中的属性
       (父类型的实例化对象赋值给子类型的原型属性,父类型中的构造函数和原型信息都会给extend2)
        var _extend1 = new extend2();
        console.log(_extend1.name);//张三
        console.log(_extend1.age);//18
  function extend3() {
          this.address = "重庆";
        }
        extend3.prototype = new extend2();//extend3继承了extend1和extend2
        var _extend2 = new extend3();
        console.log(_extend2.name);//张三
        console.log(_extend2.age);//18
        console.log(_extend2.address);//重庆
        
    extend1.prptotype.name = "lucy";
    var _extend1 = new extend1();
    console.log(_extend1.name);//张三  就近原则,现在实例里面找,有就返回,没有才去原型里面找
   子类型从属于自己或他的超类型(父类型)
    alert(_extend2.instanceof Object);//true 
    alert(_extend2.instanceof extend2);//true 
    alert(_extend2.instanceof extend1);//true 
2、组合继承
  function Group1(age) {
          this.name = ["Linda",'Bob','Lucy','Anna'];
          this.age = 25;
        }
 构造函数里的方法放在构造里每次实例化都会分配一个内存地址(浪费),放在原型里保证每次实例化都只有一个引用地址:
        Group1.prototype.run = function () {
          return this.name + ',' + this.age;
        }
        function Group2(age) {
          Group1.call(this,age);//对象冒充只能继承构造实例中的,不能继承原型中的信息
        }
        Group2.prototype = new Group1();//原型链继承,否则原型里的run方法是访问不到的
        var _group1 = new Group2(20);
        console.log(_group1.run());

3、原型式继承
1. 临时中转函数
  function obj (o) {//o表示杨要穿ID进的一个对象
     function F(){};//F构造函数是一个临时新建的对象,用于存储传过来的对象
     F.prototype = o; //jiango对象实例赋值给F构造函数的原型对象
     return new F(); //返回这个得到传递过来对象的对象实例
  }
2. 字面量的声明方式(相当于 var box = new Box();)
 var box= {
   name:"Lucy",
   age :100
 }
F.prototype = 0;//
 var box1 = obj(box);box1就等于 new F();
 alert(box1.name);//lucy
4、寄生式继承=原型式+工厂模式
1. 临时中转函数
  function obj (o) {//o表示杨要穿ID进的一个对象
     function F(){};//F构造函数是一个临时新建的对象,用于存储传过来的对象
     F.prototype = o; //jiango对象实例赋值给F构造函数的原型对象
     return new F(); //返回这个得到传递过来对象的对象实例
  }
//寄生函数
function create(o){
   var f = obj(o);
   f.run = function(){
     return this.name + "方法";
   }
   return f;
}
 var box= {
   name:"Lucy",
   age :100
 }
var box1 = create(box);
alert(box1.run());//lucy方法
5、寄生式组合继承(最终完美版本)
1. 临时中转函数
  function obj (o) {//o表示杨要穿ID进的一个对象
     function F(){};//F构造函数是一个临时新建的对象,用于存储传过来的对象
     F.prototype = o; //jiango对象实例赋值给F构造函数的原型对象
     return new F(); //返回这个得到传递过来对象的对象实例
  }
2.寄生函数
  function create(box,desk){
   var f = obj(box.prototype);
   desk.prototype = f;
   return f;
}
3.构造函数
function Box(name,age){
  this.name = name;
  this.age = age;
]
4.原型式方法
Box.prototypr.run = function(){
    return this.name + this.age + "运行中..."
 }
5.对象冒充
function Desk(name,age){
   Box.call(this,name,age);
 }
6.通过寄生组合继承来实现继承
create(Box,Desk);//用于替代 Desk.prototype = new Box();

js基础——继承的更多相关文章

  1. 【 js 基础 】Javascript “继承”

    是时候写一写 "继承"了,为什么加引号,因为当你阅读完这篇文章,你会知道,说是 继承 其实是不准确的. 一.类1.传统的面向类的语言中的类:类/继承 描述了一种代码的组织结构形式. ...

  2. 【 js 基础 】【读书笔记】Javascript “继承”

    是时候写一写 “继承”了,为什么加引号,因为当你阅读完这篇文章,你会知道,说是 继承 其实是不准确的. 一.类1.传统的面向类的语言中的类:类/继承 描述了一种代码的组织结构形式.举个例子:“汽车”可 ...

  3. JS基础-全方面掌握继承

    前言 上篇文章详细解析了原型.原型链的相关知识点,这篇文章讲的是和原型链有密切关联的继承,它是前端基础中很重要的一个知识点,它对于代码复用来说非常有用,本篇将详细解析JS中的各种继承方式和优缺点进行, ...

  4. 基础3:js实现继承的多种方式

    js实现继承的多种方式 1. 原型链继承 function Parent() { this.name = 'xwk' } Parent.prototype.getName = function() { ...

  5. js基础篇——call/apply、arguments、undefined/null

    a.call和apply方法详解 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 ...

  6. AJAX学习前奏----JS基础加强

     AJAX学习前奏----JS基础加强 知识概要: 1.js类&属性&方法的定义 2.静态属性与方法 3.构造方法 4.原型的使用 5.Object对象直接加属性和方法 6.JSO ...

  7. js基础--javaScript数据类型你都弄明白了吗?绝对干货

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...

  8. JS基础学习1

    1 JS 概述 一个完整的javascript实现是由以下3个不同部分组成的: (1)     核心(ECMAscript) (2)     文档对象模型(DOM)  Document object ...

  9. 前端面试题目汇总摘录(JS 基础篇)

    JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string typeof null; // o ...

随机推荐

  1. SDUT-3403_数据结构实验之排序六:希尔排序

    数据结构实验之排序六:希尔排序 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 我们已经学习了各种排序方法,知道在不同的 ...

  2. js实现动态计数效果

    下面附有数字图片和数字边框图 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  3. 阿里云王广芳:5G时代,我们需要怎样的边缘计算?

    7月24日阿里云峰会开发者大会的IT基础设施云化专场中,阿里云边缘计算高级技术专家王广芳进行了边缘节点服务重大升级发布,同时与现场观众一同探讨了5G时代边缘计算的思考与技术实践. 5G时代,我们需要怎 ...

  4. Python 基于 NLP 的文本分类

    这是前一段时间在做的事情,有些python库需要python3.5以上,所以mac请先升级 brew安装以下就好,然后Preference(comm+',')->Project: Text-Cl ...

  5. pl/sql基础知识—过程快速入门

    n  过程 过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out),通过在过程中使用输入参数,可以将数据传递到执行部分:通过使用输出参数可以将执行部分的数据传递 ...

  6. 通过DataWorks数据集成归档日志服务数据至MaxCompute进行离线分析

    通过DataWorks归档日志服务数据至MaxCompute 官方指导文档:https://help.aliyun.com/document_detail/68322.html但是会遇到大家在分区上或 ...

  7. 使用pip出现 cannot import name "main"

    最近在linux使用pip install时遇到了这个报错 1.jpg ImportError: cannot import name main 遇到这个问题,我的解决办法是:cd 到usr/bin目 ...

  8. python 缓冲区 subprocess 黏包 黏包解决方案

    一.缓冲区 二.两种黏包现象 两种黏包现象: 1 连续的小包可能会被优化算法给组合到一起进行发送 黏包现象1客户端 import socket BUFSIZE = 1024 ip_prort = (' ...

  9. Python学习之路1☞简介及入门代码

    在学习之前,首先了解一下python的前世今生 一.python简介与发展: python 是一种面向对象的解释性计算机程序设计语言. python由荷兰人Guido van Rossum 于1989 ...

  10. 学生信息管理系统之【修改信息窗口】 标签: 数据库vb 2014-06-13 21:23 1167人阅读 评论(15)

    自从开始敲学生信息管理,就发现有几个窗口从来木有成功打开过,它们是(修改学籍信息)(修改成绩信息)和(修改课程信息)窗口,这几个窗口每次想打开的时候都会弹出"实时错误:3021"这 ...