总复习

82 阅读5分钟

1. BFC

  1. 块级格式上下文 (Box Formatting Context)
  2. 触发条件:
  • html
  • float属性不为none
  • position为absolute或fixed
  • display为inline-block,table-cell,tablecaption,flex
  • overflow不为visible

2. prototype

  1. 函数中的prototype属性是一个指针,指向它的原型对象,原型对象下的属性和方法,可以被实例化对象所共享
  2. 原型下有一个constructor属性,指向它的构造函数

3.继承

  1. 调用父类的call(),改变this的指向
	function Person(name,age){
   		this.name = name;
        this.age = age;
    }
    
    function Coder(name,age){
   		Person.call(this,name,age);
    }
  1. 子类的原型是父类,同时需注意:要把 子类 的原型对象下的constructor属性指向 子类
Coder.prototype = new Person();
Coder.prototype.constructor = Coder;

4.改变this指向

  • call() 直接调用
  • apply() 直接调用
  • bind() 不直接调用(eg:定时器)

5.阻止事件冒泡、阻止默认事件

  1. 事件冒泡
  • e.stopPropagation()
  • e.cancelBubble = true (IE浏览器)
  1. 默认事件
  • return false
  • e.preventDefault()
  • e.returnValue = false (IE浏览器)

6.addEventListener

当有多个事件要绑定在一个元素上时使用

oDiv1.addEventListener('click',function(){
	console.log()
},false)

false代表冒泡,true代表捕获

  • 冒泡:从里向外
  • 捕获:从外向里
    同时有冒泡和捕获时,先捕获,再冒泡

7.get和post的区别

  • GET在浏览器回退时是无害的,而POST会再次提交请求。
  • GET产生的URL地址可以被Bookmark,而POST不可以。
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET请求在URL中传送的参数是有长度限制的,而POST么有。
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  • GET参数通过URL传递,POST放在Request body中

8.Generator

 总结一下,调用Generator函数,返回一个遍历器对象,代表 Generator 函数的内部指针。以后,每次调用遍历器对象的next方法,就会返回一个有着value和done两个属性的对象。value属性表示当前的内部状态的值,是yield表达式后面那个表达式的值;done属性是一个布尔值,表示是否遍历结束。

9.react和vue的区别

react

  • 函数式思想,jsx 语法,js操控css
  • 单项数据流,每当应用的状态被改变时,全部子组件都会重新渲染。可以通过shouldComponentUpdate这个生命周期方法来进行控制,如果为true继续渲染、false不渲染,但Vue将此视为默认的优化

vue

  • 响应式思想,也就是基于数据可变的。把html、js、css组合到一起,也可以通过标签引擎组合到一个页面中
  • 双向绑定,每一个属性都需要建立watch监听

 vue 通过使用双向数据绑定,来实现了 View 和 Model 的同步更新。vue 的双向数据绑定主要是通过使用数据劫持和发布订阅者模式来实现的。

10.vue的双向数据流

 首先我们通过 Object.defineProperty() 方法来对 Model 数据各个属性添加访问器属性,以此来实现数据的劫持,因此当 Model 中的数据发生变化的时候,我们可以通过配置的 setter 和 getter 方法来实现对 View 层数据更新的通知。

 数据在 html 模板中一共有两种绑定情况,一种是使用 v-model 来对 value 值进行绑定,一种是作为文本绑定,在对模板引擎进行解析的过程中。

 如果遇到元素节点,并且属性值包含 v-model 的话,我们就从 Model 中去获取 v-model 所对应的属性的值,并赋值给元素的 value 值。然后给这个元素设置一个监听事件,当 View 中元素的数据发生变化的时候触发该事件,通知 Model 中的对应的属性的值进行更新。

 如果遇到了绑定的文本节点,我们使用 Model 中对应的属性的值来替换这个文本。对于文本节点的更新,我们使用了发布订阅者模式,属性作为一个主题,我们为这个节点设置一个订阅者对象,将这个订阅者对象加入这个属性主题的订阅者列表中。

 当 Model 层数据发生改变的时候,Model 作为发布者向主题发出通知,主题收到通知再向它的所有订阅者推送,订阅者收到通知后更改自己的数据。

11.作用域链

  一般情况下,变量取值到 创建 这个变量 的函数的作用域中取值。但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链。

12.原型链

  当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链。