JavaScript的原型和继承

原型(prototype):

prototype是属于函数的一个空间,它是一个对象。因为构造函数也是函数所以它也具备。而这个prototype属性我们称为显式原型。

 

函数的prototype:

 

实例对象访问对于的prototype上的内容可以通过实例对象.属性名访问一般将对应的函数存储在对应prototype上(这个函数只会声明一次)。将函数存储在原型,将属性放在构造函数里面。在prototype里面声明的函数的this指向当前的调用的实例对象

__proto__:

__proto__称为隐式原型,它是属于对象的一个空间,每个对象都存在这个空间,那么对应的实例对象也是一个对象,所以它也有这个空间。这个空间指向对应的构造函数的prototype.

 __proto__的指向:

__proto__指向对应的构造函数的prototype构造函数也是一个对象那么它的__proto__指向谁指向对应的父类的构造函数的prototypeObject的__proto__指向null

 原型链:

原型链  (解决构造函数的缺陷)

            1.先找自己的__proto__ (对于的构造函数的prototype)

            2.再找对应的自身构造函数的原型的__proto__找到父类构造函数的原型

                   再找对应的父类的原型的__proto__ ,直到找到object为止

            3. Object的原型的__proto__(null)上还找不到返回undefined

Object.prototype.hello='你好'

        class Person{

            constructor(){

                this.name='张三'

            }

        }

        Person.prototype.sex='女'

        Person.prototype.username='rose'

        class Son extends Person{

            constructor(){

                super()

                this.age='李四'

            }

        }

        Son.prototype.sex='男'

        //实例化

        var son =new Son()

        console.log(son.age);//李四

        console.log(son.name);//张三

        console.log(son.username); //rose

        console.log(son.sex); //男

        console.log(son.hello); //你好

        console.log(son.hi); //undefined

原型重写forEach高阶函数:

数组的原型

       在数组的原型上添加一个myForEach的方法

       在对应的原型上的函数里面的this指向当前调用的实例对象

 原型重写map高阶函数:

 原型重写reduce高阶函数:

 继承:

ES6新增的继承:

缺点:会有兼容问题,低版本浏览器不适用

优点:代码结构清晰,方便阅读

 原型继承:

缺点:会覆盖原型上的私有的属性和方法,在原型上重复出现一样的属性.

核心 :在子类的原型上创建父类的对象

 对象冒充继承:

缺点:不能继承原型上的方法:

核心: 在子类中调用父类的构造函数 ,更改this的指向

 组合继承:

优点: 使用了对象冒充+原型连接继承的结合

 组合寄生继承:

(对象冒充+原型链继承 (创建一个原型对象放在原型链上))

 核心: 在子类的原型上创建父类的原型对象

 ES6的模块化:

模块的思想,将对应的功能代码封装为一个模块(js代码 css代码 html代码)。想要使用别人就导入,想要给别人用就导出。复用

模块化的常用的模式:

 amd (在对应的加载之前导入)

cmd (在用的时候导入)

comment.js (基于amd和cmd之上)

es6的模块化的关键词 :

import  导入

export  导出

注意:  必须要先导出才能导入

 第一种export default用法:

导出 (默认导出只能有一个)

 第二种导出 export(多个) :

如果直接使用对应的export 导出name通过{键}来接收

 第三种导出(根据变量)

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值