前端基础知识点

52 阅读1分钟

1.构造函数,原型对象,对象三者之间的联系

构造函数通过prototype指向原型对象   原型对象通过prototype里面的constructor指向构造函数
new出来的对象通过__propto__指向原型对象  对象和构造函数之间是  构造函数new出来的对象
原型链:由外到内进行查询,一直查询奥最顶端

2.this的指向问题

普通函数的this指向window
点击事件的this指向事件源对象
箭头函数的this指向离它最近的this
构造函数的this指向他new出来的对象
对象里面的函数指向当前的对象
注意点:构造函数中的方法的this,如果是在构造函数内部定义的方法则this指向new出来的对象.若是在proptotype上面定义的方法,则this指向window
示例代码:`function fun() {
    this.a = 3;
    this.actick = () => {
      console.log(this);
    };
  }
  fun.prototype.say = () => {
    console.log(this);
  };
  var fn = new fun();
  fn.say();
  fn.actick();`
new的操作过程:
      创建一个新的对象
      给这个新的对象与prototype进行连接
      把构造函数拥有的属性和方法赋予他
      最后把这个对象return出去

3.浅拷贝和深拷贝

 浅拷贝:只赋值值,但是仍用一个内存地址,只要一个发生变化另外一个也发生变化
 深拷贝:通过递归的方法进行深度拷贝,值的赋值,也改变了内存地址
   深拷贝复杂数据类型示例代码:
    ` var str = {
    name: "张三",
    age: 18,
    hobby: ["打球", "做美食", "玩游戏", { name: "平安" }],
    a: {
      zw: "隐官",
      dj: "仙人境",
    },
  };
  var str1 = {};
  function kaobei(oldArr, newArr) {
    for (var key in oldArr) {
      if (oldArr[key] instanceof Array) {
        newArr[key] = [];
        kaobei(oldArr[key], newArr[key]);
      } else if (oldArr[key] instanceof Object) {
        newArr[key] = {};
        kaobei(oldArr[key], newArr[key]);
      } else {
        newArr[key] = oldArr[key];
      }
    }
  }
  kaobei(str, str1);  `

4.