【总结】2017.03.03

2017.03.03

- 计划
- 实际完成
  • 完善hM侧边栏组件化
  • 将弹出框也封装
- 总结
  • 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,859评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 昨天偶然趴在九班外头看风景 面前的大树却俨然变了样 我两个多星期没有看到那棵树了 它现在枝叶更加稀疏了 三三两两蜷...
    _Strawberry阅读 144评论 0 0
  • 自从今年夏天爸妈去了重庆,把妹妹也带去那儿读书后,家里就只剩下我和奶奶两个人。但我也陪不了奶奶多久,一旦开学我回到...
    胖不动阅读 649评论 15 6