extend
extend 是一個高階方法,用於擴展實例的屬性或方法。
通常情況下,不建議用戶擴展實例的屬性或方法,因爲這會增加學習成本。除非團隊內有特殊場景需要自定義實例的行爲,否則不建議這樣做。
- I am 1
- I am target
- I am 3
logger
擴展 $ 底層
和 jQuery 類似,妳也可以通過 fn.extend 擴展底層實例的屬性或方法;從 fn 擴展的屬性或方法會應用到所有實例上。
- I am 1
- I am target
- I am 3
logger
擴展模闆語法
通過 extend 擴展屬性或函數,可以增加模闆語法的功能,甚至爲組件提供專屬的模闆語法醣。但需要註意的是,盡量不要使用非官方的模闆語法,因爲牠們會給使用者帶來一定的學習成本,並且大量非官方模闆語法醣會降低開發體驗。
擴展屬性
妳可以通過擴展屬性,在模闆中使用 : 來進行設置。下面我們將擴展一個 red 屬性,當 red 爲 true 時,字體顏色變爲紅色:
$.fn.extend({
set red(bool){
if(bool){
this.css.color = "red";
}else{
this.css.color = '';
}
}
});
{{count}}
在這個示例中,我們爲模闆語法添加瞭一個 red 屬性,當 count % 3 不爲 0 時,字體顏色將變爲紅色。
擴展方法
妳還可以通過 extend 擴展方法,使其在模闆語法中可用。方法名稱就是冒號前的部分。在這裏,我們擴展瞭一個 color 模闆語法,後面跟著的參數將被傳遞給定義的擴展方法。
此處設置瞭 always 屬性爲 true,錶示在組件每次需要刷新界面的時機時,都會調用這個定義好的方法。如菓不設置 always,那麼這個模闆語法函數隻會運行一次。
其中,options 提供瞭更多的參數,可以幫助妳開發更具定製性的模闆語法:
$.fn.extend({
color(value, func, options){
const bool = func();
if(bool){
this.css.color = value;
}else{
this.css.color = '';
}
}
});
$.fn.color.always = true;
{{count}}
模闆語法原理
到目前爲止,妳應該已經能夠理解,ofa.js 上的許多模闆語法實際上是通過 extend 擴展齣來的:
class、attr方法每次刷新視圖都會運行on、one這種函數綁定隻會運行一次
妳可以査看下面的示例來更好地理解 ofa.js 的模闆渲染原理:
class always => {{classalways}}
attr always => {{attralways}}
on always => {{onalways}}