1、属性继承 :call 、apply:不建议使用浪费内存。

function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
} Person.prototype.eat = function(){
console.log("正在吃饭")
}
Person.prototype.sleep = function(){
console.log("正在睡觉")
} function Man(larynx,beard,name,age,sex,){
Person.call(this,name,age,sex) this.larynx = larynx;
this.beard = beard; }
Man.prototype.work = function(){
console.log('111')
}
var songlei = new Man(10,20);
console.log(songlei); // Man{
// age: undefined
// beard: 20
// larynx: 10
// name: undefined
// sex: undefined
// }

2、原型继承:

  缺点:原型继承会污染父级
function Person(name,age,sex){
    this.name = name;
    this.age = age;
    this.sex = sex;
}
Person.prototype.eat = function(){
    console.log("正在吃饭")
}
Person.prototype.sleep = function(){
    console.log("正在睡觉")
}
function Man(larynx,beard,name,age,sex,){
    Person.call(this,name,age,sex)
    this.larynx = larynx;
    this.beard = beard;
    
}
Man.prototype = Person.prototype;
Man.prototype.work = function(){
    console.log('111')
}
var aaa = new Man(10,20);
console.log(aaa);
    // Man{
        // age: undefined
        //  beard: 20
        //  larynx: 10
        //  name: undefined
        //  sex: undefined
        //  __proto__:
            //  eat: ƒ()
            //  sleep: ƒ()
            //  work: ƒ()
            //  constructor: ƒ Person(name, age, sex)
    // }
var p1 = new Person()
console.log(p1)
    // Person{
        // age: undefined
        // name: undefined
        // sex: undefined
        // __proto__:
        // eat: ƒ()
        // sleep: ƒ()
        // work: ƒ()
        // constructor: ƒ Person(name, age, sex)
    // }

3、原型拷贝:

function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
Person.prototype.eat = function(){
console.log("正在吃饭")
}
Person.prototype.sleep = function(){
console.log("正在睡觉")
}
function Man(larynx,beard,name,age,sex,){
Person.call(this,name,age,sex)
this.larynx = larynx;
this.beard = beard; } for(var key in Person.prototype){
Man.prototype[key] = Person.prototype[key]
}
Man.prototype.work = function(){
console.log('111')
} var aaa = new Man(10,20);
console.log(aaa);
// Man { name: undefined, age: undefined, sex: undefined, larynx: 10, beard: 20 }
// __proto__:
// eat: ƒ()
// sleep: ƒ()
// work: ƒ()
// constructor: ƒ Man(larynx, beard, name, age, sex)
var p1 = new Person()
console.log(p1)
// Person { name: undefined, age: undefined, sex: undefined }
// __proto__:
// eat: ƒ()
// sleep: ƒ()
// constructor: ƒ Person(name, age, sex)

4、原型链继承:

原型链:
        由__proto__组成的链条叫做原型链
  原型链继承是不推荐使用的
        因为会多了好多无用的属性
        而且还少了constructor
function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
} Person.prototype.eat = function(){
console.log("正在吃饭")
} Person.prototype.sleep = function(){
console.log("正在睡觉")
}
function Man(larynx,beard,name,age,sex,){
Person.call(this,name,age,sex) this.larynx = larynx;
this.beard = beard; }
// __proto //__proto__
Man.prototype = new Person();
Man.prototype.work = function(){
console.log('111')
}
var aaa = new Man(10,20);
console.log(aaa);
// Man{
// age: undefined
// beard: 20
// larynx: 10
// name: undefined
// sex: undefined
// __proto__: Person
// age: undefined
// name: undefined
// sex: undefined
// work: ƒ()
// } var p1 = new Person()
console.log(p1)
// Person{
// age: undefined
// name: undefined
// sex: undefined
// __proto__:
// eat: ƒ()
// sleep: ƒ()
// constructor: ƒ Person(name, age, sex)
// }

5、寄生继承:

缺点:增加了无用的函数

function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
Person.prototype.type="人类";
Person.prototype.eat = function(){
console.log("正在吃饭")
}
Person.prototype.sleep = function(){
console.log("正在睡觉")
}
function Man(larynx,beard,name,age,sex,){
Person.call(this,name,age,sex)
this.larynx = larynx;
this.beard = beard; }
//创建了一个寄生器
function fn(){};
//寄生器的原型对象 = 人类的原型对象
fn.prototype = Person.prototype;
//原型链继承 寄生器的实例对象
Man.prototype = new fn();
Man.prototype.constructor = Man;
Man.prototype.work = function(){
console.log('111')
}
var aaa = new Man(10,20);
console.log(aaa);
// Man{
// age: undefined
// beard: 20
// larynx: 10
// name: undefined
// sex: undefined
// __proto__: Person
// constructor: ƒ Man(larynx, beard, name, age, sex)
// work: ƒ()
// }

6、混合继承:我最喜欢的一种方式

function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
Person.prototype.type="人类";
Person.prototype.eat = function(){
console.log("正在吃饭")
}
Person.prototype.sleep = function(){
console.log("正在睡觉")
}
function Man(larynx,beard,name,age,sex,){
Person.call(this,name,age,sex)
this.larynx = larynx;
this.beard = beard;
}
//Man.prototype = Object.create(Person.prototype);
Man.prototype = {
constructor:Man,
__proto__:Person.prototype
}
Man.prototype.work = function(){
console.log('111')
}
var aaa = new Man(10,20);
console.log(aaa);
// Man{
// age: undefined
// beard: 20
// larynx: 10
// name: undefined
// sex: undefined
// __proto__: Person
// constructor: ƒ Man(larynx, beard, name, age, sex)
// work: ƒ()
// } var p1 = new Person();
console.log(p1)
// Person{
// age: undefined
// name: undefined
// sex: undefined
// __proto__:
// eat: ƒ()
// sleep: ƒ()
// type: "人类"
// constructor: ƒ Person(name, age, sex)
// }

7、Es6继承

ES6类的语法
            1、声明类的时候用 class
       class 类名{
            constructor(){
                属性
            }
            方法
        }
class Person{
constructor(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
eat(){}
sleep(){}
}
class Man extends Person{
constructor(larynx,beard){
//实现继承必须使用super
super();
this.larynx = larynx;
this.beard = beard;
}
work(){}
}
var aaa = new Man()
console.log(aaa)
// Man{
// age: undefined
// beard: undefined
// larynx: undefined
// name: undefined
// sex: undefined
// __proto__: Person
// constructor: class Man
// work: ƒ work()
// }

js继承的几种方法理解和代码演示的更多相关文章

  1. 实现JS继承的几种方法

    总的来说,JS的继承大体上分为两种:借用构造函数方式和原型方式 首先,我们来看看借用构造函数方式的几种做法: //方式一function Person(name, sex){ this.name = ...

  2. JS继承的6种方法

    1.原型链 基本思想:利用原型让一个引用类型继承另外一个引用类型的属性和方法. 构造函数,原型,实例之间的关系:每个构造函数都有一个原型对象,原型对象包含一个指向构造函数的指针,而实例都包含一个指向原 ...

  3. JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)

    JavaScript继承的6种方法 1,原型链继承 2,借用构造函数继承 3,组合继承(原型+借用构造) 4,原型式继承 5,寄生式继承 6,寄生组合式继承 1.原型链继承. <script t ...

  4. js对象之间的"继承"的五种方法

    今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个"动物"对象的构造函数. function Animal(){ this.species = & ...

  5. 4.Javascript中实现继承的几种方法及其优缺点

    要搞懂JS继承,我们首先要理解原型链:每一个实例对象都有一个__proto__属性(隐式原型),在js内部用来查找原型链:每一个构造函数都有prototype属性(显示原型),用来显示修改对象的原型, ...

  6. js去除空格12种方法

    注:本文非本人原著:原文作者: 黄卉  <js去除空格12种方法> //JS去除空格的方法目前共有12种: //实现1 String.prototype.trim = function() ...

  7. 判断数组的方法/判断JS数据类型的四种方法

    参考文: 以下 3 个判断数组的方法,请分别介绍它们之间的区别和优劣Object.prototype.toString.call() . instanceof 以及 Array.isArray() h ...

  8. Java执行shell脚本并返回结果两种方法的完整代码

    Java执行shell脚本并返回结果两种方法的完整代码 简单的是直接传入String字符串,这种不能执行echo 或者需要调用其他进程的命令(比如调用postfix发送邮件命令就不起作用) 执行复杂的 ...

  9. js继承的几种实现方法

    一.用function实现: function Person(name) { this.name = name; } Person.prototype.getName = function() { r ...

随机推荐

  1. [Javascript] Use requestIdleCallback to schedule JavaScript tasks at an optimal time

    JavaScript is single-threaded, which can present some problems when creating an interactive user exp ...

  2. LeetCode 1039. Minimum Score Triangulation of Polygon

    原题链接在这里:https://leetcode.com/problems/minimum-score-triangulation-of-polygon/ 题目: Given N, consider ...

  3. MySQL 为什么不用分区表(转载)

    一分钟系列 潜在场景如何? 当MySQL单表的数据量过大时,数据库的访问速度会下降,“数据量大”问题的常见解决方案是“水平切分”. MySQL常见的水平切分方案有哪些? (1)分库分表: (2)分区表 ...

  4. MySQL 已有大数据量表进行分区踩坑

    一.背景mysql 表中已有 4 亿数据,为提高查询效率,需创建分区,一开始计划是创建 HASH 分区,结果报错:ERROR 1659 (HY000): Field 'partno' is of a ...

  5. [Gradle] 解决高德 jar 包打包到 aar 后 jar 包中的 assets 内容丢失

    问题描述 将高德 SDK 的 jar 包放到 android library project libs 目录下,发布为 aar 包后,发现高德 jar 包中的 assets 目录下的内容不见了 原因见 ...

  6. CSS3 之filter毛玻璃效果弹窗

    先看效果: 效果主要用css3的滤镜属性实现,代码如下: <!DOCTYPE html> <html lang="en"> <head> < ...

  7. c博客作业01--顺序分支结构

    0.展示PTA总分 1.本章学习总结 1.1 学习内容总结 1.运算符需注意的要点 '/'的左右两边如果均为整型数,其结果也为整型:'%'的左右两边只能为整型数: 优先级:逻辑运算符<关系运算符 ...

  8. Noip2019暑期训练1

    题目名称 时空定位 棋子移动 高精度乘法 数独游戏 存盘文件名 location piece mul sudoku 输入文件名 location.in piece.in mul.in sudoku.i ...

  9. 查看服务器内存、CPU、网络等占用情况的命令--汇总

    搭建测试环境过程中,需要对正在使用的aws服务器(实际这是一台虚拟出来的服务器),查看它在运行脚本,启动脚本时的内存,CPU,网络等使用情况 1.查看服务器cpu内核个数: -cat 每个物理cpu中 ...

  10. koa art-template模板引擎的使用

    art-template 模板引擎介绍 art-template 是一个简约.超快的模板引擎. 它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行 性能,并且同 ...