譯者:王二狗
博客:掘金趋翻、思否芹壕、知乎、簡書锯玛、CSDN
點贊再看咐柜,養(yǎng)成習慣,你們的支持是我持續(xù)分享的最大動力??
原文鏈接:https://www.sitepoint.com/shorthand-javascript-techniques/
最近一直在不停的造Vue
輪子攘残,目前已經完成了Button
拙友、網格布局
、默認布局
歼郭、Input
等輪子遗契。
今天在編寫Toast
輪子的時候遇到了一個問題,說一說我的思考過程病曾,拿出來和大家分享一下牍蜂,希望對大家有所幫助漾根。??
需求分析
在決定去造一個輪子之前,首先要做的就是需求分析鲫竞,其中最重要的一步就是你的輪子造出來之后辐怕,其他人怎樣使用你的輪子。
我希望用到我輪子的用戶可以全局去調用我的輪子贡茅,就像下面這樣:
this.$toast()
遇到問題
那么我如何才能做到讓用戶使用上述方式去調用我的輪子呢秘蛇?
我首先想到的方法是直接將我的輪子掛載到Vue
的prototype
上
import Vue from 'vue'
Vue.prototype.$toast = function () {
console.log('this is my toast');
}
這樣做可以是可以,但是存在兩個潛在的工程問題顶考。
工程問題:在我們的工程項目中會實際發(fā)生的問題,其特點就是具有不可預測性妖泄,這種不可預測性驹沿,往往不是你可以通過目前代碼的分析而得出的。
問題一:$toast
可能以前就已經有了
如果以前就存在了一個$toast
蹈胡,那么按照你上述的處理方式渊季,你就會覆蓋掉原有的$toast
。
針對這個問題罚渐,我最初想到的處理方式是提前對$toast
進行一個檢測
import Vue from 'vue'
if (Vue.prototype.$toast == undefined) {
Vue.prototype.$toast = function () {
console.log('i an toast');
}
}
這種處理方式的問題就在于却汉,如果在這之前$toast
真的已經存在了,那你的$toast
怎么辦荷并?這種處理方式的問題在于侵入性太強了合砂。
問題二:很有可能使用你輪子的用戶和你的Vue
版本不一致
如果使用你輪子的用戶所用的Vue
版本和你的不一致怎么辦?
import Vue from 'vue1'
import Vue from 'vue2'
......
墨菲定律
所謂墨菲定律源织,說的就是小概率事件必將發(fā)生翩伪,如果你不相信,那么你就存在僥幸心理谈息,你就在自己騙自己缘屹。
所以,我們必須要想出合理的方式解決上面遇到的兩個工程問題侠仇。
解決方案(Vue插件)
最后通過翻閱 Vue
文檔轻姿,我發(fā)現(xiàn)Vue
里面的插件可能很好的解決我所遇到的問題。
創(chuàng)建插件:
export default {
install(){
Vue.prototype.$toast = function () {
console.log('i am toast');
}
}
}
引入插件:
import Plugin from './toast/plugin'
Vue.use(Plugin)
使用輪子:
this.$toast()
告誡自己逻炊,即使再累也不要忘記學習互亮,成功沒有捷徑可走,只有一步接著一步走下去嗅骄。 共勉胳挎!