继承:让子类拥有父类的属性和方法
//继承是类与类之间的关系
谈继承是一个悖论:
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前端的优化
//首先想到的就是缓存,有缓存是不是超级快?