美文网首页
原型链&继承

原型链&继承

作者: 阿亮2019 | 来源:发表于2018-06-12 19:12 被阅读8次
// es5实现继承
/*
  介绍: 所有 Animal 都要吃东西,Animal类有一个公用的eat方法 和 name属性
  Rabbit 类继承自 Animal,它有公用的 jump 方法。

*/
function Animal(name) {
  this.name = name;
}

Animal.prototype.eat = function() {
  console.log('I love eat dinner!');
}

const a = new Animal('aaa');
// console.dir(a);

function Rabbit(name) {
  Animal.call(this, name); // oops!
}

const f = function () { }
f.prototype = Animal.prototype;
Rabbit.prototype = new f(); // oops!



Rabbit.prototype.jump = function() { // 注意要写在上面oops的下面
  console.log('I can jump high!');
}

const r = new Rabbit('rabbit');
console.dir(r)

// es6实现继承
class Animal { // 注意不是 Animal()
  constructor(name) { // constructor必须要
    this.name = name;
  }
  eat() {
    console.log('eat');
  }
}

class Rabbit extends Animal { // 注意不是 Rabbit()
  constructor(name) {
    super(name); // super必须要
  }
  jump () {
    console.log(jump);
  }
}

const r = new Rabbit('xiaobai');
console.log(r);

输入如下:


es5继承写法

总结:

  1. 所有的对象都有 proto 属性
原型链

内存中的所有对象在内存中以🌲的数据结构存储(右上角蓝色部分),
1,2,3指的是'Leon', 'Jack', 'Tom', 上层是Man男人,Woman女人,再上层是人类,Human,最顶层是Object,共有属性。

// es6写法
class Human {
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
    run() {
        console.log('I like running!');
    }
}

class Man extends Human {
    constructor(name, age, like){
        super(name, age);
        this.like = like;
    }
    fight() {
        console.log('All man like fight');
    }
}

const man = new Man('leon', 18, 'play games');
console.dir(man);
man.run();
man.fight();
es6继承写法

var o = {}
console.log(o._proto_ === Object.prototype); // 为 true

var fn = function(){}
console.log(fn._proto_ === Function.prototype); // 为 true
console.log(fn._proto_._proto_ === Object.prototype); // 为 true

var array = []
console.log(array._proto_ === Array.prototype); // 为 true
console.log(array._proto_._proto_ === Object.prototype); // 为 true

console.log(Function._proto_ === Function.prototype); // 为 true oops!
console.log(Array._proto_ === Function.prototype); // 为 true oops!
console.log(Object._proto_ === Function.prototype); // 为 true oops!

true._proto_ === Boolean.prototype; // 为 true

console.log(Function.prototype._proto_ === Object.prototype); // 为 true

相关文章

  • 继承

    原型链直接继承 原型链直接继承prototype 原型链继承_prototype属性 继承_构造函数绑定

  • 原型链&继承

    输入如下: 总结: 所有的对象都有 proto 属性 内存中的所有对象在内存中以?的数据结构存储(右上角蓝色部分)...

  • js中的实现继承的几种方式

    大纲:原型链借用构造函数组合继承原型式继承寄生式继承寄生组合式继承 1、原型链: 什么是原型链? 原型链的基本思想...

  • JavaScript 原型、原型链与原型继承

    原型,原型链与原型继承 用自己的方式理解原型,原型链和原型继承 javascript——原型与原型链 JavaSc...

  • js基础之实现继承的几种方式

    js 实现继承的方式有: 原型链继承; 构造函数继承; 组合继承(原型链继承 + 构造函数继承)(最常用);(原型...

  • es5的部分继承以及es6的class

    一、JavaScript常用的原型继承方式 原型链继承 2,构造函数继承(对象冒充继承) 3,组合继承(原型链继承...

  • 构造函数原型的继承方式分析

    1.通过原型链继承 综上我们可以总结出 通过原型链来实现继承的原理通过原型链来实现继承的原理原型链继承方案中,父类...

  • Javascript 面向对象的程序设计(原型链与继承)

    继承 原型链 讲原型的时候提到过继承,设计原型的初衷就是为了继承,原型链是实现继承的主要方法。那什么是原型链,还记...

  • JavaScript继承方式详解

    JavaScript实现继承的方式主要有两种: 原型链继承和借助构造函数继承 一、原型链继承 原型链继承的主要思想...

  • js_继承及原型链等(四)

    js_继承及原型链等(三) 1. 继承 依赖于原型链来完成的继承 发生在对象与对象之间 原型链,如下: ==原型链...

网友评论

      本文标题:原型链&继承

      本文链接:https://www.haomeiwen.com/subject/kgmreftx.html