【总结】2017.03.03

2017-03-03  本文已影响0人  I_am_Cynthia

2017.03.03

- 计划
- 实际完成
- 总结
  • Cannot call a class as a function at _classCallCheck babel之class处理

  • Step1: 定义
    Class Person{} 被编译为:

function _classCallCheck(instance, Constructor) { 
    // 检查是否成功创建了一个对象 
    if (!(instance instanceof Constructor)) { 
        throw new TypeError("Cannot call a class as a function"); 
    }
}
var Person = function Person() { _classCallCheck(this, Person); };
```
你可能会一头雾水,_classCallCheck是什么?其实很简单,它是为了保证调用的安全性。 
比如我们这么调用:   
// ok ` new p = new Person();`
是没有问题的,但是直接调用:  
// Uncaught TypeError: Cannot call a class as a function Person();
就会报错,这就是_classCallCheck所起的作用。具体原理自己看代码就好了,很好理解。 
我们发现,Class关键字会被编译成构造函数,于是我们便可以通过new来实现实例的生成。
Step2:Constructor探秘
我们这次尝试加入constructor,再来看看编译结果:   
class Person() { constructor(name) { this.name = name; this.type = 'person' } }
编译结果:   
var Person = function Person(name) { _classCallCheck(this, Person); this.type = 'person'; this.name = name; };
看上去棒极了,我们继续探索。
  • class Menu {}
    若在object中 { menu: Menu },调用会报错。class不能以对象形式调用,虽然会解析成function Menu () {}。
    只能通过new Menu() 去调用。
    参考:写一个微信小程序自定义公共组件
    内调用class 是 App({ LoginPannel })
    new app.LoginPannel()
  • template 使用展开的数据是 data="{{ ...obj }}", 若page.data上没有定义 obj ,在template 内使用wx:for循环输出列表会报错。就算在onLoad事件上setData也是有误的。
  • VM18377:2 firstRender not the data from Page.data
  • firstRender not the data from Page.data;firstRender not the data from Page.data Error: firstRender not the data from Page.data
上一篇下一篇

猜你喜欢

热点阅读