日常记录的一些知识点

122 阅读2分钟

1.方法复用

面向对象的同学应该知道,构造函数实例化时,同时会创建实例的属性和方法,一般每个实例的属性都不相同,而方法因为是函数,所以会复用,已达到节省内存的效果

class Person {
  constructor(name) {
    this.name = name
  }
  eat() {}
}

const person1 = new Person('张三')
const person2 = new Person('李四')

console.log(person1.name === person2.name) // false
console.log(person1.eat === person2.eat) // true

Vue2 的组件借鉴了面向对象的原理,虽然内部的实现方式不同,但最终的行为一致,即组件的每个实例都拥有不同的 data,但会复用相同的methods

Vue 组件中通过将 data 定义为一个函数,函数的返回值作为组件的数据来源,使得每个组件实例的数据都不相同。而 watch 也和 methods 对象相同,所有组件实例共用,所以也会存在和methods一样,在复用的时候,可能会存在问题。

2.http状态码

  • 301-永久重定向
  • 302-临时重定向
  • 304-资源存在但是不可用,比如客户端发送了一个带条件的 GET 请求,并且该请求已被允许,但是资源不符合条件,比如缓存日期什么的,就会返回304

3.原型总结

对象的__proto__属性指向它的构造函数的__prototype__属性,如果对象找一个属性找不到,就会去它的__proto__指向的对象(也就是构造函数的__prototype__)去找,不停重复向上,直到到顶。

4.Vue-Router

Vue-Router创建的时候,里面的每个路由选项,开启props:true,则url中的参数会自动映射到组件里props中。

5.Vue

  • Vue分为运行时版本和完整版本,当选用运行时版本的时候,仅能使用render函数定义组件内容,不可以使用template方式,因为运行时版本缺少了一个对template标签进行编译的机制。而完整版本可以采用render和template两种方式,打开完整版本的方式参考链接。个人感觉尽量采用render形式,原因如下:
    • render形式更接近运行时候,少一步编译,效率更高。
    • 减少编译器的注入,减少代码体积
    • 兼容性更强
  • render函数中的h方法,可以直接将一个组件转换为虚拟dom,太cool了。