一、构造函数继承

 
function Parent() {
this.money = '2亿'
this.eat = function () {
console.log('吃饭')
}
} function Son(name, age) {
Parent.apply(this, arguments)
this.name = name;
this.age = age } var s = new Son("小明", 18);
s.eat()//吃饭

二、prototype模式

* 通过 子类的prototype = 父类的实例来继承
* 缺点:效率比较低,比较废内存
 
function Parent() {
this.money = '2亿'
this.eat = function () {
console.log('吃饭')
}
} Parent.prototype.hobby = function () {
console.log("旅行")
} function Son(name, age) {
this.name = name;
this.age = age
} Son.prototype = new Parent(); // 将Son的prototype对象指向一个Parent的实例。它相当于完全删除了prototype 对象原先的值,然后赋予一个新值
/**
*
* 任何一个prototype对象都有一个constructor属性,指向它的构造函数。
* 如果没有"Son.prototype = new Parent();"这一行,Son.prototype.constructor是指向Son的;加了这一行以后,Son.prototype.constructor指向Parent。
*
*/
Son.prototype.constructor = Son var son = new Son("小明", 18);
son.hobby()//旅行

三、直接继承prototype

* 子类的prototype = 父类的prototype
* 缺点:子类的prototype和父类的prototype指向同一个对象,那么子类的prototype修改那么父类的prototype也会修改
function Parent() { }

Parent.prototype.hobby = function () {
console.log("旅行")
} function Son(name, age) {
this.name = name;
this.age = age
} Son.prototype = Parent.prototype;
Son.prototype.constructor = Son; let s = new Son();
s.hobby();//旅行

四、利用空对象作为中介

* 优点:空对象几乎不占内存,子类的prototype修改不会影响到父类prototype的改变
function Parent() { }

Parent.prototype.hobby = function () {
console.log("旅行")
} function Son(name, age) {
this.name = name;
this.age = age
} // function Buffer(){} //空对象
// Buffer.prototype = Parent.prototype;
// Buffer.prototype.constructor = Buffer;
// Son.prototype = new Buffer();
// Son.prototype.constructor = Son;
// let s = new Son();
// s.hobby() /**
* 对上述方法进行封装
*/ function extend(Child, Parent) {
function Buffer() { };
Buffer.prototype = Parent.prototype;
Buffer.prototype.constructor = Buffer;
Child.prototype = new Buffer();
Child.prototype.constructor = Child
} extend(Son, Parent);
let s = new Son();
s.hobby()//旅行

javaScript面向对象(继承篇)的更多相关文章

  1. JavaScript面向对象—继承的实现

    JavaScript面向对象-继承的实现 前言 面向对象的三大特性:封装.继承和多态.上一篇我们简单的了解了封装的过程,也就是把对象的属性和方法封装到一个函数中,这一篇讲一下JavaScript中继承 ...

  2. javaScript面向对象继承方法经典实现

    转自原文javaScript面向对象继承方法经典实现 JavaScript的出现已经将近20多年了,但是对这个预言的褒贬还是众说纷纭.很多人都说JavaScript不能算是面向对象的变成语言.但是Ja ...

  3. JavaScript面向对象继承方法

    JavaScript的出现已经将近20多年了,但是对这个预言的褒贬还是众说纷纭.很多人都说JavaScript不能算是面向对象的变成语言.但是JavaScript的类型非常松散,也没有编译器.这样一来 ...

  4. JavaScript 面向对象继承详解

    题记 由于js不像java那样是完全面向对象的语言,js是基于对象的,它没有类的概念.所以,要想实现继承,一般都是基于原型链的方式: 一.继承初探 大多数JavaScript的实现用 __proto_ ...

  5. Javascript 面向对象-继承

    JavaScript虽然不是面向对象的语言,但是我们通过构造可以让其支持面向对象,从而实现继承.重写等面向对象的特性.具体代码如下: //创建类Person function Person(age,n ...

  6. javascript面向对象——继承

    javascript和其他语言相比,它没有真正意义上的继承,也不能从一个父类extends,要实现它的继承可以通过其他方式来实现: 步骤:1.继承父类的属性 2.继承父类的原型 下面就以一个拖拽为例子 ...

  7. JavaScript面向对象--继承 (超简单易懂,小白专属)

    一.继承的概念 子类共享父类的数据和方法的行为,就叫继承. 二.E55如何实现继承?探索JavaScript继承的本质 2.1构造函数之间的"复制粘贴" 第一条路是通过构造函数来继 ...

  8. JavaScript 面向对象继承的实现

    <script type="text/javascript"> function Animal () { this.species="Animal" ...

  9. javascript面向对象继承和原型

    一.理解什么是对象:任何东西都可以是对象,对象就是一组无序属性的集合 对象具有属性和方法1.1 属性的类型属性内部又定义了两种属性:数据属性和访问器属性 (1)数据属性:有4个描述的行为 Config ...

  10. javascript面向对象系列第三篇——实现继承的3种形式

    × 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...

随机推荐

  1. leecode76. 最小覆盖子串

    76. 最小覆盖子串 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" . 注意: ...

  2. excel快速生成相同内容

    先选中你所需要的单元格,如图所示: 输入自己想要的字符,然后按ctrl+enter,如图所示:

  3. 实验一-密码引擎-加密API实现与测试

    实验一-密码引擎-加密API实现与测试 1 下载并查找GMT 0018-2012密码设备应用接口规范原始文档进行学习 (5分) 2 实现GMT 0018-2012密码设备应用接口规范的接口函数,至少实 ...

  4. 刘蓉年谱.PDF

    书本详情 刘蓉年谱.PDF 所有责任者: 陆宝千著 所有题名: 并列正题名:A chronological biography of Liu JungChronological biography o ...

  5. python requests 模拟登录

    转载: https://blog.csdn.net/m0_59485658/article/details/128115786

  6. python之目录结构01

    本文档主要是自己学习巩固以及复习之用,主要写些自己的学习体会! 以下为一个简要的目录构: Foo/ |-- bin/ | |-- foo | |-- foo/ | |-- tests/ | | |-- ...

  7. IDEA中常见问题

    idea中不存在.iml文件项目主目录下执行命令行mvn idea:module

  8. shell - scriptreplay timing.log output.session

    script -t 2> timing.log -a output.session cmd cmd cmd exit scriptreplay timing.log output.session ...

  9. dbeaver把表数据导出csv时字符串自动加双引号问题解决

    背景: mysql 5.7 dbeaver 21.1.4 解决:如下图,括起字符这里设置一个 空格(space)即可: 参考1

  10. laravel service provider 1

    可以理解成分两步: 配置.register, 因为只有配置了才有被调用去register, 也许不配置直接在appserviceProvider里面可以直接生效.... service: 具体工作的类 ...