22.1.2 作用域安全的构造函数

  1. function Person(name){
  2. if(this instanceof Person){
  3. this.name = name;
  4. }else{
  5. return new Person(name);
  6. }
  7. }

:::info 这样就算不实例化这个构造函数,this也指向Person :::

22.1.4 函数绑定

  1. var handle = {
  2. msg: "ss",
  3. handleClick: function(event){
  4. console.log(this.msg,event.type);
  5. }
  6. }
  7. // 这里是自己写的,下面调用的bind是原生的api
  8. function bind(fn,context){
  9. return function(){
  10. return fn.apply(context,arguments)
  11. }
  12. }
  13. // document.getElementById("test1").addEventListener("click",function(event){
  14. // handle.handleClick(event);
  15. // });
  16. document.getElementById("test1").addEventListener("click",handle.handleClick.bind(handle));

:::info 尽可能的少用闭包,这里可以用bind()将函数绑定到指定环境 :::

22.3.3 函数节流

背后的思想是:某些代码不可以在没有间断的情况下连续重复执行,目的是在执行函数的请求停止了一段时间后才执行

  1. function throttle(method, context){
  2. clearTimeout(method.tId);
  3. method.tId = setTimeout(function(){
  4. method.call(context);
  5. }, 200)
  6. }
  7. document.getElementById("test1").onclick = function(){
  8. throttle(demo2);
  9. }
  10. function demo2(){
  11. // 执行业务的代码
  12. console.log("防止点击的太快");
  13. }

:::info 只要代码是周期性执行的,都应该使用节流。 :::