# behaviors
## 定義和使用 behaviors
`behaviors` 是用于組件間代碼共享的特性,類似于一些編程語言中的“mixins”或“traits”。
每個 `behavior` 可以包含一組屬性、數據、生命周期函數和方法,組件引用它時,它的屬性、數據和方法會被合并到組件中,生命周期函數也會在對應時機被調用。每個組件可以引用多個 `behavior` 。 `behavior` 也可以引用其他 `behavior` 。
`behavior` 需要使用 `Behavior()` 構造器定義。
**代碼示例:**
```
// my-behavior.js
module.exports = Behavior({
behaviors: [],
properties: {
myBehaviorProperty: {
type: String
}
},
data: {
myBehaviorData: {}
},
attached: function(){},
methods: {
myBehaviorMethod: function(){}
}
})
```
組件引用時,在 `behaviors` 定義段中將它們逐個列出即可。
**代碼示例:**
```
// my-component.js
var myBehavior = require('my-behavior')
Component({
behaviors: [myBehavior],
properties: {
myProperty: {
type: String
}
},
data: {
myData: {}
},
attached: function(){},
methods: {
myMethod: function(){}
}
})
```
在上例中, `my-component` 組件定義中加入了 `my-behavior` ,而 `my-behavior` 中包含有 `myBehaviorProperty` 屬性、 `myBehaviorData` 數據字段、`myBehaviorMethod` 方法和一個 `attached` 生命周期函數。這將使得 `my-component` 中最終包含 `myBehaviorProperty` 、 `myProperty` 兩個屬性,`myBehaviorData` 、 `myData` 兩個數據字段,和 `myBehaviorMethod` 、 `myMethod` 兩個方法。當組件觸發 `attached` 生命周期時,會依次觸發 `my-behavior` 中的 `attached` 生命周期函數和 `my-component` 中的 `attached` 生命周期函數。
## 字段的覆蓋和組合規則
組件和它引用的 `behavior` 中可以包含同名的字段,對這些字段的處理方法如下:
- 如果有同名的屬性或方法,組件本身的屬性或方法會覆蓋 `behavior` 中的屬性或方法,如果引用了多個 `behavior` ,在定義段中靠后 `behavior` 中的屬性或方法會覆蓋靠前的屬性或方法;
- 如果有同名的數據字段,如果數據是對象類型,會進行對象合并,如果是非對象類型則會進行相互覆蓋;
- 生命周期函數不會相互覆蓋,而是在對應觸發時機被逐個調用。如果同一個 `behavior` 被一個組件多次引用,它定義的生命周期函數只會被執行一次。
## 內置 behaviors
自定義組件可以通過引用內置的 `behavior` 來獲得內置組件的一些行為。
**代碼示例:**
```
Component({
behaviors: ['wx://form-field']
})
```
在上例中, `wx://form-field` 代表一個內置 `behavior` ,它使得這個自定義組件有類似于表單控件的行為。
內置 `behavior` 往往會為組件添加一些屬性。在沒有特殊說明時,組件可以覆蓋這些屬性來改變它的 `type` 或添加 `observer` 。
### wx://form-field
使自定義組件有類似于表單控件的行為。 form 組件可以識別這些自定義組件,并在 submit 事件中返回組件的字段名及其對應字段值。這將為它添加以下兩個屬性。
| 屬性名 | 類型 | 描述 | 最低版本 |
| ----- | ------ | -------- | ---------------------------------------- |
| name | String | 在表單中的字段名 | [1.6.7](https://mp.weixin.qq.com/debug/wxadoc/dev/framework/compatibility.html) |
| value | 任意 | 在表單中的字段值 | [1.6.7](https://mp.weixin.qq.com/debug/wxadoc/dev/framework/compatibility.html) |
- 簡介
- 第一章 公眾號開發
- 使用微信JSSDK
- 接口權限配置
- 分享接口
- 隱藏按鈕項
- 微信支付
- 第二章 小程序開發
- 基礎知識
- 分包加載
- WXSS樣式表
- 配置
- app.json配置
- window
- tabBar
- page.json配置
- 邏輯層
- app.js
- 場景值
- page.js
- 初始化數據
- 生命周期函數
- 頁面相關事件處理函數
- 事件處理函數
- 頁面實例方法
- 路由
- 文件作用域
- 模塊化
- 視圖層
- 模板語法
- 列表渲染
- 條件渲染
- 模板
- 事件
- 引用
- WXS語法規范
- WXS數據類型
- WXS控制流程
- WXS基礎類庫
- 組件
- 視圖容器
- view
- scroll-view
- swiper
- movable-view
- cover-view
- 基礎組件
- icon
- text
- rich-text
- progress
- 表單組件
- button
- checkbox
- form
- input
- label
- picker
- picker-view
- radio
- slider
- switch
- textarea
- 導航組件
- navigator
- 媒體組件
- audio
- image
- video
- camera
- 地圖組件
- map
- 畫布組件
- canvas
- 開放能力
- web-view
- 自定義組件
- 組件模版和樣式
- Component
- 組件傳值
- 組件事件
- Behaviors
- 組件間關系
- 網絡請求
- wx.request
- 微信登錄
- 獲取 openid 和 unionid
- 獲取用戶信息
- 將 wx.request 封裝為 promise
- 上傳圖片接口封裝
- 數據存儲
- 存儲數據和讀取數據
- 獲取數據緩存信息
- 移除數據緩存
- 獲取用戶設置
- openSetting
- getSetting
- 第三章 小游戲開發
- 參考資料