JS查漏补缺

2018-08-21  本文已影响0人  郑无穷大

1、继承

继承可以使得子类具有父类别的各种属性和方法,而不需要再次编写相同的代码。

__proto__和prototype的联系与区别

__proto__是JavaScript中对象实例所拥有的一个属性,它指向的是该对象实例所对应的prototype对象。(需要注意的是,如上所述,Object.prototype是所有对象继承的顶点,而它的__proto__的值为null) 

__proto__与prototype的区别则在于,__proto__是对象固有的属性,它指向的是该对象实例的构造函数的prototype(Object.prototype除外),而prototype是函数固有的属性,其值是一个函数的原型对象。对象的__proto__指向构造函数的prototype。

只有构造函数才有prototype,prototype只有一个功能就是用来存放共有属性对象的地址。

ES5 实现继承的方式就是加原型链:

其中Man.prototype.__proto__ = Human.prototype  IE不支持,因为IE不允许控制__proto__。

等价于:

var f = function(){}

f.prototype = Human.prototype

Man.prototype = new f()

原理:New 会间接强行让其相等;

具体为:

var obj = new Fn ()

(1)产生一个空对象;(2)this = 空对象;

(3)this.__proto__ = Fn.prototype

(4)执行Fn.call(this,arguments...)

(5)return (4)的结果

如果直接Man.prototype = new Human(),但是new会让第四部分执行的结果绑定到this.__proto__上,因此

var f = function(){}

f.prototype = Human.prototype

是必要的,将Human这个构造函数内的proto清空。

改原型链是十分损耗性能的。

ES6 写法



2、mixin、柯里化等常见术语

mixin 混入   

mixin等同于Object.assign(a,b)的作用;

curry 柯里化

将一个函数的多个自变量或者多个函数,其中的部分自变量或者部分函数固定,得到新的偏函数,这个过程叫作柯里化。


HOC 高阶函数



3、同步、异步

同步,在主线程依次执行 异步,执行完主线程后再调用,思考一下event loop

4、事件委托、事件冒泡


点击li将其内input的value显示在h1标签 也可用Array.from(items)变成数组 添加点击事件添加元素并点击元素依旧显示在页面中;事件委托,坚挺动态生成li的父元素ul,添加点击事件,再执行子类; 阻止事件冒泡
上一篇 下一篇

猜你喜欢

热点阅读