AMY-Y
AMY-Y
babel的转译过程分为三个阶段:parsing(解析)、transforming(转化)、generating(生成) babel转译的具体过程如下: ES6代码输入 ==》 babylon进行解析 ==》 得到AST==》 plugin用babel-traverse对AST树进行遍历转译 ==》 得到新的AST树 ==》 用babel-generator通过AST树生成ES5代码 babel将es6+(指es6及以上版本)分为语法层和api层: 语法层: let、const、class、箭头函数等,这些需要在构建时进行转译,是指在语法层面上的转译,(比如class...将来会被转 译成var function...) api层:Promise、includes、map等,这些是在全局或者Object、Array等的原型上新增的方法,它们可以由相应es5的方式重 新定义 babel对这两个分类的转译的做法是不一样的,需要给出相应的配置 语法层可以使用插件preset进行转译;api层可以使用polyfill进行转译。同时preset-env的useBuiltIns属性可以控制加载代码中用到的polyfills @babel/plugin-transform-runtime插件: 实现对辅助函数的复用,解决转译语法层时出现的代码冗余 解决转译api层出现的全局变量污染 作者:no_bug 链接:https://juejin.im/post/6844904199554072583 来源:掘金
1.是什么 每一个实例对象都有一个私有属性__proto__指向其构造函数的原型对象prototype,该原型对象也会作为实例对象有一个私有属性__proto__,层层向上直到一个对象的原型对象值为null。 当访问一个对象的属性或方法时,js引擎会先查找该对象本身是否包含,如果没有,会去该对象的__proto__属性所指向的原型对象上找,如果没有,会继续向上一层找,直到某个对象的__proto__值为null,这就是原型链。 ``` function func(){}; console.log(func.prototype); var foo=new func(); console.log(foo.__proto__); 两个输出结果一样,大致如下: { constructor: ƒ func(), __proto__: { constructor: ƒ Object(), hasOwnProperty: ƒ hasOwnProperty(), isPrototypeOf: ƒ isPrototypeOf(), propertyIsEnumerable: ƒ propertyIsEnumerable(),...
1、功能上:computed是计算属性,watch是监听一个值的变化,然后执行对应的回调。 2、是否调用缓存:computed中的函数所依赖的属性没有发生变化,那么调用当前的函数的时候会从缓存中读取,而watch在每次监听的值发生变化的时候都会执行回调。 3、是否调用return:computed中的函数必须要用return返回,watch中的函数不是必须要用return。 4、使用场景:computed----当一个属性受多个属性影响的时候,使用computed-------购物车商品结算。watch----当一条数据影响多条数据的时候,使用watch-------搜索框。 引自----https://www.cnblogs.com/wuqilang/p/11241604.html
new 的本质是生成一个新对象,将对象的_proto_指向函数的prototype,再执行call 方法 普通构造函数通过 new 实例化对象时 this 指向实例对象,而箭头函数没有自己的this值,用call()或者apply()调用箭头函数时,无法对this进行绑定 箭头函数没有 prototype 属性 ,不能作为构造函数,否则 new 命令在执行时无法将构造函数的 prototype 赋值给 新的对象的 __proto__