关于Vue插件中prototype和全局mixin选择的问题

现在的场景是想要在每个组件内调用一个方法一个对象就是以:

this.fun()
this.ajaxLib.xxx()

针对这种结果,在Vue的插件写法中有两种写法

Myplugins.install = (Vue) => {
    // 1
    Vue.prototype.fun = () => {}
    // 2
    Vue.mixin({
        methods: {
            fun () {}
        }
    })
}

想问下这两种方式推荐哪种,区别又是什么?mixin的形式会加大内存占用量吗?

阅读 6.3k
3 个回答

1. 从代码上说:

Vue.mixin 方式实质就是就是在 vue 初始化对象的时候,把 Vue.mixin 的参数 复制到了初始化对象中(具体可以参考源码),代码简化如下:

function Vue(){
  this.mixin();
}
Vue.mixin= function(option){
    $.extend(this, option);
}

Vue.prototype 就是直接添加到原型上

所以区别就是一个是直接在对象上,一个是在原型上,在线测试
http://jsbin.com/cisucofine/e...

2. 从使用上说

Vue.mixin 的参数其实和 Vue 构造函数的类似,可以看作是为了复用 Vue 组件的方式。

Vue.prototype 就是完全创建一个新的方法

反对使用 Vue.prototype,因为你不知道会不会和以后的 Vue 版本中的 prototype 冲突。

推荐Vue.prototype

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题