这里写目录标题
 类与对象es6 中类和对象的注意点
  
  构造函数存在的问题复杂属性问题原型对象指向问题构造函数 实例 原型对象三者关系
   父原型对象方法继承问题解决办法注意问题
  
  数组数组查询
  闭包用处Demo闭包的作用(不是很理解
  
  const变量变量声明的区别
 
类与对象
 
es6 中类和对象的注意点
 
  <button
>click
</button
>
    <script
>
      var that
;
      var _that
;
      class Star {
        constructor(uname
, age
) {
          
          that 
= this;
          this.uname 
= uname
;
          this.age 
= age
;
          this.btn 
= document
.querySelector("button");
          this.btn
.onclick 
= this.sing
;
        }
        sing() {
          
          console
.log(this);
          
          
          console
.log(that
.uname
); 
          
        }
        dance() {
          
          _that 
= this;
          console
.log(this);
        }
      }
      
      
      var ldh 
= new Star("刘德华");
      
      console
.log(that 
=== ldh
); 
      ldh
.dance();
      console
.log(_that 
=== ldh
); 
    </script
>
 
构造函数存在的问题
 
复杂属性问题
 
 
     function Star(uname
, age
) {
        this.uname 
= uname
;
        this.age 
= age
;
        
        
        
      }
      Star
.prototype
.sing = function () {
        console
.log("我会唱歌");
      };
      var ldh 
= new Star("ldh", 18);
      var zxy 
= new Star("zxy", 19);
      console
.log(ldh
.sing 
=== zxy
.sing
);
      ldh
.sing();
      zxy
.sing();
      
 
 
 console
.log(ldh
.__proto__ 
=== Star
.prototype
); 
      
 
原型对象指向问题
 
 <script
>
      function Star(uname
, age
) {
        this.name 
= uname
;
        this.age 
= age
;
      }
      
      
      
      
      
      
      
      
      Star
.prototype 
= {
        constructor
: star
,
        sing
: function () {
          console
.log("我会唱");
        },
        movie
: function () {
          console
.log("我会演电影");
        },
      };
      var ldh 
= new Star("ldh", 18);
    </script
>
 
构造函数 实例 原型对象三者关系
 
 
父原型对象方法继承问题
 
   
      function Father(uname
, age
) {
        this.uname 
= uname
;
        this.age 
= age
;
      }
      Father
.prototype
.money = function () {
        console
.log(10000000000);
      };
      
      function Son(uname
, age
, score
) {
        Father
.call(this, uname
, age
);
        this.score 
= score
;
      }
      
      
      
      Son
.prototype
.exam = function () {
        console
.log("我要考试");
      };
      var son 
= new Son("ldh", 18);
      var Father 
= new Father("baba", 45);
      console
.log(son
);
      console
.log(Father
);
 
简单地将父类的原型对象赋值给子类原型对象,当对子类原型对象添加独有方法时,由于赋值的方式是将父类原型对象的地址给子类原型对象,这就导致了当对子类原型对象进行修改(添加独有方法),会使得父类实例也带有子类独有方法

 
解决办法
 
 
 <script
>
      
      function Father(uname
, age
) {
        this.uname 
= uname
;
        this.age 
= age
;
      }
      Father
.prototype
.money = function () {
        console
.log(10000000000);
      };
      
      function Son(uname
, age
, score
) {
        Father
.call(this, uname
, age
);
        this.score 
= score
;
      }
      Son
.prototype 
= new Father();
      
      Son
.prototype
.constructor 
= Son
;
      
      Son
.prototype
.exam = function () {
        console
.log("我要考试");
      };
      var son 
= new Son("ldh", 18);
      var Father 
= new Father("baba", 45);
      console
.log(son
);
      console
.log(Father
.prototype
);
      console
.log(Son
.prototype
.constructor
);
    </script
>
 
注意问题
 
利用创建对象的形式修改了原型对象的话,该函数会指向目标函数的构造函数,别忘了用constructor指回原来的构造函数 
 
数组
 
数组查询
 
  var arr 
= [1, 2, 3, 4, 5, 6];
      
      arr
.filter(function (value
) {
        if (value 
=== 4) {
          console
.log("找到了");
          return true;
        }
        console
.log(11);
      });
 
如果查询的是数组中的唯一元素.则some的性能最高,true后回中断查询
 
闭包
 
用处
 
用于衍生变量的作用范围
 
Demo
 
function fn() {
        var num 
= 10;
        return function () {
          console
.log(num
);
        };
      }
      var f 
= fn();
      f();
 
闭包的作用(不是很理解
 
  <body
>
    <ul 
class="nav">
      <li
>1</li
>
      <li
>2</li
>
      <li
>3</li
>
      <li
>4</li
>
    </ul
>
    <script
>
      
      
      var lis 
= document
.querySelector(".nav").querySelectorAll("li");
      for (var i 
= 0; i 
< lis
.length
; i
++) {
        lis
[i
].index 
= 1;
        lis
[i
].onclick = function () {
          console
.log(i
);
        };
      }
      
      for (let i 
= 0; i 
< lis
.length
; i
++) {
        (function (i
) {
          
          
          lis
[i
].onclick = function () {
            console
.log(i
);
          };
        })(i
);
      }
    </script
>
  </body
>
 
const变量
 
//复杂数据类型内的数值可以更改,但是重新赋值会改变其地址,不可更改
 
    <script
>
      
      
      
      const PI = 3.14;
      
      const arr 
= [100, 200];
      
      arr
[0] = 123;
      arr 
= [1, 2];
      console
.log(arr
);
    </script
>
 
变量声明的区别
 
 如果使用的值无需变动.使用const的效率要比var更高,因为JS无需实时监测 该变量的变动