小程序 – 自定义组件 – behaviors 代码共享
简介
behaviors 是小程序中,用于实现组件间代码共享的特性,类似于 Vue.js 中的 “mixins”。
工作方式
每个 behavior 可以包含一组属性、数据、生命周期函数和方法。组件引用它时,它的属性、数据和方法会被合并到组件中。
每个组件可以引用多个 behavior,behavior 也可以引用其它 behavior。
创建 behavior
调用 Behavior(Object object) 方法即可创建一个共享的 behavior 实例对象,供所有的组件使用
导入使用 Behavior
在组件中,使用 require() 方法导入需要的 behavior,挂载后即可访问 behavior 中的数据或方法
Behavior 中可用节点
可用的节点 | 类型 | 是否必填 | 描述 |
properties | Object Map | 否 | 同组件的属性 |
data | Object | 否 | 同组件的数据 |
methods | Object | 否 | 同自定义组件的方法 |
behaviors | String Array | 否 | 引入其它的 behavior |
created | Function | 否 | 生命周期函数 |
attached | Function | 否 | 生命周期函数 |
ready | Function | 否 | 生命周期函数 |
moved | Function | 否 | 生命周期函数 |
detached | Function | 否 | 生命周期函数 |
同字段覆盖规则
组件和它引用的 behavior 中可以包含同名的字段,对这些字段的处理方法如下:
一. 如果有同名的属性 (properties) 或方法 (methods):
1.若组件本身有这个属性或方法,则组件的属性或方法会覆盖 behavior 中的同名属性或方法;
2.若组件本身无这个属性或方法,则在组件的 behaviors 字段中定义靠后的 behavior 的属性或 方法会覆盖靠前的同名属性或方法;
3.在 2 的基础上,若存在嵌套引用 behavior 的情况,则规则为:引用者 behavior 覆盖 被引用的 behavior 中的同名属性或方法。
二. 如果有同名的数据字段 (data):
1.若同名的数据字段都是对象类型,会进行对象合并;
2.其余情况会进行数据覆盖,覆盖规则为: 引用者 behavior > 被引用的 behavior 、 靠后的 behavior > 靠前的 behavior。(优先级高的覆盖优先级低的,最大的为优先级最高)
三. 生命周期函数和 observers 不会相互覆盖,而是在对应触发时机被逐个调用:
1.对于不同的生命周期函数之间,遵循组件生命周期函数的执行顺序;
2.对于同种生命周期函数和同字段 observers ,遵循如下规则:
behavior 优先于组件执行;
被引用的 behavior 优先于 引用者 behavior 执行;
靠前的 behavior 优先于 靠后的 behavior 执行;
3.如果同一个 behavior 被一个组件多次引用,它定义的生命周期函数和 observers 不会重复执行。
共有 0 条评论