2020.6.8 JavaScript 回顾

发布于 2020-06-08  71 次阅读


Table of Contents

  • 定义所有对象都需要有的属性和方法
    • 如果在构造函数中定义,每次都执行,造成了冗余
  • 对象可以通过proto属性来查看原型
  • 对象可以通过constructor来查看构造函数
  • 修改原型属性 (构造函数名.prototype.属性 可以修改)
    • 1.对象不可以修改、添加,删除原型的属性
    • 2.对象中定义的同名的属性,并没有覆盖原型属性
    • 3.对象中定义属性要使用 this.属性 = 值
  • 原型中默认带有的两个属性
    • constructor
      • conttructor的值有两种情况
        • 指定prototype属性就是属性对象
        • 默认就是自身
      • 指定构造函数,
      • 可以手动更改
    • __proto__
      • proto是一级一级指向祖先元素,最终元素是Object
      • 指向父类 __proto__:Person.prototype
      • 可以被修改
  • prototype 指定新的对象

    • 原理:
      • 在未生成对象时,proto指向的是原始Person.prototype的对象,
      • 对象生成时候,改变Person.prototype的对象,不影响proto
      • 对象之间赋值:a = b = new A(),b=new B() 但是a对象不变
    • 只能写在对象生成之前
  • new一个对象时候发生了什么?

    • 三段式:
      • var this = { __proto__:Person.prototype}
        • 把圆形和自己连接一起,如果自身没有该属性,则沿着原型向上查找
  • JavaScript原型链系统

    • 分为对象和函数
      • 对象有__proto__属性,函数有prototype属性;
      • 对象由函数生成;
      • 生成对象时,对象的__proto__属性指向函数的prototype属性。
    • 总结
      • js里所有的对象都有__proto__属性(对象,函数),指向构造该对象的构造函数的原型。
      • 只有函数function才具有prototype属性。这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。
      • 原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。
  • Javascript call函数和apply函数

    • 两者共同的功能就是改变this的指向
    • 两者唯一不同的地方就是传递参数类型,一个是数组
    • 函数默认执行就是 函数名.call()来执行
    • call如果传递一个参数obj,那么调用call方法对象中的this全部等于obj对象
    • 第一个参数是一个对象,比如传递obj ,执行完call(obj),obj就借助调用call的方法中的参数,实现了在obj中定义了参数
    • call(obj,参数)
  • JavaScript闭包

    • 1.JavaScript的变量在立即执行函数中,执行完毕就释放了
    • 2.JavaScript的变量在循环,if等外部中,也可以访问
  • JavaScript命名规则

    • _ 单下划线:同事等尽量不要修改改动
    • 双下划线 系统定义 ,尽量不要修改
  • 原型链

    • 原型链修改:

      • 给引用值添加属性,__proto__.age = 10 ,
    • 对象字面量创建对象

      • 绝大多数对象最终都会继承Object
        • Object.create() 可以指定原型为null
        • undefine 和 null都不是继承Object
        • 原型是一种隐士属性,系统构建,自己构建的没有作用
      • 对象字面量创建对象的原型,就是Object
      • Object.create(原型对象) 这种方式也可以创建一个对象
      • 创建对象,一般使用大括号{}
      • {} 就是new Object()对象
  • 继承发展史

    • 1.传统形式 原型链

      • 原理:祖先有一些属性,爷爷辈也有一些属性,父类也有一些属性,实际上只想要祖先的一个属性,这样就继承了一堆无用的属性,(爷爷原型指向祖先的对象,父类原型指向爷爷的对象 new 爷爷() )
      • 缺点:过多了继承了没用的属性
    • 2.借用构造函数

      • 原理:使用call和apply 将构造函数的部分功能直接拿来用
      • 缺点:
    • 3.共享原型

    • 4.圣杯模式

  • 4.扩展延伸知识

    5.知识内容个人梳理

    6.今天都复习了之前的什么内容