// 使用 `export` 关键字将名为 `link` 的变量作为模块的导出项，这样其他模块就可以引入并使用它。
// `link` 在这里被赋值为通过 `Behavior` 函数创建的一个行为对象，在微信小程序等框架中，行为对象能够被组件引入，以此复用其中定义的属性、方法等内容，来扩展组件的功能。
export const link = Behavior({
    // `properties` 属性用于定义该行为对象所包含的组件可接收的外部属性，相当于对外暴露的配置项，外部使用组件时可以传入对应的值来配置组件的行为和状态。
    properties: {
        // `url` 属性，其值被限定为字符串类型（`String`），外部使用组件时需要传入符合字符串格式的数据，通常用于指定链接的地址，比如页面跳转的目标地址等。
        url: String,
        // `linkType` 属性，详细定义了它的类型为字符串类型（`type: String`），并且设置了默认值为 `'navigateTo'`。
        // 这个属性大概率用于指定链接跳转的方式，默认是 `'navigateTo'`，表示以小程序中对应的页面跳转方式（类似 `wx.navigateTo`）进行跳转，外部也可以传入其他符合要求的跳转方式字符串来改变默认行为。
        linkType: {
            type: String,
            value: 'navigateTo'
        }
    },
    // `methods` 属性用于定义该行为对象中包含的方法，这些方法可以被使用了这个行为的组件所调用，用于实现特定的功能逻辑。
    methods: {
        // 定义名为 `jumpLink` 的方法，该方法用于触发链接跳转的操作，接收一个可选参数 `urlKey`，默认值为 `'url'`。
        jumpLink(urlKey = 'url') {
            // 从组件实例的数据（`this.data`）中获取由 `urlKey` 指定的属性值，并赋值给变量 `url`。
            // 通常情况下，如果 `urlKey` 使用默认值 `'url'`，就是获取之前定义的 `url` 属性所对应的值，也就是目标跳转地址。
            const url = this.data[urlKey];
            // 判断获取到的 `url` 是否存在（不为空字符串、`null`、`undefined` 等假值情况），如果存在，则执行页面跳转操作。
            if (url) {
                // 通过 `wx` 对象（微信小程序提供的全局 API 对象），使用 `this.data.linkType` 指定的跳转方式来进行页面跳转，将获取到的 `url` 作为参数传递给对应的跳转方法。
                // 例如，如果 `linkType` 的值为 `'navigateTo'`，就相当于执行 `wx.navigateTo({ url })`，实现跳转到指定的页面地址。
                wx[this.data.linkType]({ url });
            }
        }
    }
});