继承

继承:让子类拥有父类的属性和方法
//继承是类与类之间的关系
谈继承是一个悖论:
JavaScript是函数编程流派,是没有类的怎么谈继承呢?
Object和Array这两个函数之间没有关系,但是他们的prototype属性之间有关系

所有的对象都是Object 构造出来的

如何在JavaScript里面谈继承??

子类函数和父类函数(Object和Array之间)
子类构造出来的对象,直接拥有父类的属性和方法

直接记忆代码:


一句话,对于JavaScript编程人员来说 只有原型链没有继承的概念,继承是面向对象编程的

//可是悲催的面试官喜欢问啊

要理解继承必须要了解类:能抽象出一个对象(能产生一个对象的就是类)

因为JavaScript里面没有类,所以是函数与函数之间的关系,因为JavaScript是用构造函数来创建实例的,而且本质上构造函数和普通函数没有区别,区别在于是不是使用new 这个语法糖关键字,在普通函数前面用new ,普通函数也会变成构造函数.

老师这节课讲了那么多就几个意思:

1.JavaScript是函数范式编程语言,谈继承是瞎扯淡,不过别人硬要说,就是JavaScript原型链的意思
2.JavaScript一切是对象,实现继承依靠原型链,
函数都有一个prototype对象,用来存放公有属性
f1()函数 的prototype指向 Function 构造函数的prototype
f2() 函数也是这样,现在我们代码有需求要让f2变成f1的儿子,也就是让f2继承f1
JavaScript的做法就是修改原型链,因为f2函数的prototype指向的是Function 的prototype
要让它继承f1 就把proto指向修改成 f1的prototype

代码: f2.prototype.proto = f1.prototype
因为这是谷歌浏览器提供的proto因为兼容问题要用更兼容的代码:
var f = function () {}
f.prototype = f1.prototype
f2 . prototype = new f1()

//这样写代码的原因是因为为了兼容掐他浏览器不提供proto属性的情况
//上面用到了空函数,利用new关键这个语法糖, 不给代码块,弄一个空函数,这样 new语法糖的第四句话就不会执行

创建空对象
把空对象赋值给this
把prototype赋值给this
执行代码块里面的代码
返回这个this

讲了那么多是为了什么呢? 理解ES6的继承, ES6本质上就是语法糖,还是ES5的代码.只是把繁琐的代码封装,给你用,ES6的继承写法就是上面这些代码,原理一模一样


assyn就是mixin 把一个函数的所有属性给另外一个函数
柯里化就等于大学的偏函数,柯里化是实现偏函数的过程


性能优化

  • 当你有自己的网站和服务器才能谈及web性能优化
  • cpu用的少,这是服务器性能优化
  • web是打开页面比较快,这是web前端的优化
    //首先想到的就是缓存,有缓存是不是超级快?
999401-e967d03a6325584e.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 理解 javascript 的原型链及继承 以上所有的运行结果都是 true; 三种构造对象的方法: 通过对象字面...
    你期待的花开阅读 1,543评论 0 3
  • 博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...
    _Dot912阅读 1,454评论 3 12
  • 简介 Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。...
    emmet7life阅读 361评论 0 0
  • 1.apply、call 、bind有什么作用,什么区别? apply和call apply和call都是为了改变...
    FLYSASA阅读 331评论 0 1
  • 前言 如果你觉得JS的继承写起来特别费劲,特别艰涩,特别不伦不类,我想说,我也有同感。尤其是作为一个学过Java的...
    光头韩阅读 472评论 0 2