1.高级函数:
①.作用域安全的构造函数:如下图的例子:
当我们使用new调用时,构造函数内用到的this对象会指向新创建的对象实例,但是如果没有使用new操作符来调用构造函数,由于该this对象是在运行时绑定的,所以直接调用Person(),this会映射到全局对象windw上。导致错误对象属性的意外增加。
原本针对Person实例的三个属性被添加到了window对象上,因为构造函数作为普通函数调用,忽略了new操作符。这个问题是由this对象的晚绑定造成的。在这里this被解析成了window对象。
作用域安全的构造函数是在进行任何更改前,首先确认this对象的是否是正确类型的实例:
这样就避免了问题的发生了。
②.函数绑定:
在这个例子中,当按下点击按钮时,显示为undefined,这个问题在于没有保存handler.handleClick的环境。所以this对象最后指向了dom按钮,而非handler,所以可以使用闭包来修正这个问题:
这段代码虽然实现了目标,但是多个闭包可能会令代码变得难于理解和测试。因此很多JavaScript库实现了一个可以将函数绑定指定空间的函数,bind();
所以上述代码可变为:
2.自定义事件:
事件是JavaScript与浏览器交互的主要途径。事件是一种叫做观察者的设计模式。这是一种创建松散耦合代码的技术。对象可以发布时间,用来表示该对象生命周期中某个又去的时刻到了。然后其他对象可以观察该对象。等待这些有些的时刻到来并运行代码来响应。
观察者模式由两类对象组成:主题和观察者。主题负责发布事件,同时观察者通过订阅这些事件来观察该主体。该模式的一个关键的概念是主体并不知道观察者的任何事情。也就是说它可以独自存在并正常运作即使观察者不存在。从另一方面来说,观察者知道主体并能注册事件的回调函数(事件处理程序),涉及DOM上时,DOM元素便是主体,你的事件处理代码就是观察者。
事件是与DOM 交互的最常见的方式,但它们也可以用于非DOM代码中,通过实现自定义事件,自定义事件背后的概念是创建一个管理事件的对象。让其他对象监听那些事件。实现此功能的基本模式。
待续......后面有深入体会再来细细分享.