導航:首頁 > 知識科普 > js怎麼封裝方法

js怎麼封裝方法

發布時間:2022-12-07 09:00:47

㈠ js代碼如何封裝

1. 定義js類
js並不是一種面向對向的語言, 沒有提供對類的支持, 因此我們不能像在傳統的語言里那樣 用class來定義類, 但我們可以利用js的閉包封裝機制來實現js類, 我們來封裝一個簡的Shape類.

代碼如下:

functionShapeBase(){
this.show=function(){
alert("ShapeBaseshow");
};
this.init=function(){
alert("ShapeBaseinit");
};
}


這個類里定義了兩個方法:show和init, 需要注意的是這里用到了this來聲明, 而不是var, 因為用var是用來定義私有方法的.
另外, 我們還可以用prototype屬性來定義Shape的方法.

代碼如下:

ShapeBase.prototype.show=function()
{
alert("ShapeBaseshow");
}
ShapeBase.prototype.init=function()
{
alert("ShapeBaseinit");
}


上面這種寫法看起來不太直觀,我們可以將所有的方法寫在一起.

代碼如下:

ShapeBase.prototype={
show:function(){
alert("ShapeBaseshow");
},
init:function(){
alert("ShapeBaseinit");
}
};


現在, 類是寫好了, 讓我們寫個js來測試下, 看看結果是不是跟我們想像的一樣呢?

代碼如下:

functiontest(src){
vars=newShapeBase();
s.init();
s.show();
}


看到了吧, 其調用方式和C#一模一樣, 而結果也如我們所料.
到目前為止, 我們學會了如何創建js的類了, 但還只是實例方法,要是實現跟C#中的靜態方法要怎麼做呢?
其實, 實現js的靜態方法很簡單, 看下面如何實現:

代碼如下:

//靜態方法
ShapeBase.StaticDraw=function()
{
alert("methoddrawisstatic");
}


2. 實現JS類抽象和繼承
同樣, js中也不支持類繼承機制,但我們可以通過將父類prototype中的成員方法復制到子類的prototype中來實現.
和類的繼承一樣,JavaScript也沒有任何機制用於支持抽象類.但利用JavaScript語言本身的性質.可以實現自己的抽象類.
首先來看看js中的虛方法, 在傳統語言中虛方法是要先定義的, 而包含虛方法的類就是抽象類,不能被實例化,而在JavaScript中,虛方法就可以看作該類中沒有定義的方法,但已經通過this指針使用了.
和傳統面向對象不同的是,這里虛方法不需經過聲明,而直接使用了, 並且類也可以被實例化.
先定義object的extend方法, 一個為靜態方法,一個為實例方法, 這兩個方法用於實現繼承的prototype復制

代碼如下:

Object.extend=function(destination,source){
for(propertyinsource){
destination[property]=source[property];
}
returndestination;
}
Object.prototype.extend=function(object){
returnObject.extend.apply(this,[this,object]);
}


接下來我們實現一個繼承類Rect, 這里先用一種簡單的方法來實現。

代碼如下:

functionRect(){}
Rect.prototype=ShapeBase.prototype;//只這一句就行了
//擴充新的方法
Rect.prototype.add=function(){
alert("Rectadd");
}


這種方法不能用於重寫,如果改變了show方法, ShapeBase的show也會指向同一函數可能是由於prototype賦值只是簡單的改變指向地址.
如果上面也定義了:

Rect.prototype.show=function(){
alert("Rectshow");
}


那麼執行結果如下:

functiontest(){
vars=newShapeBase();
s.show();//結果:Rectshow
varr=newRect();
r.show();//結果:Rectshow
r.add();
}


我們再使用object.extend實現繼承, 並實現一個oninit虛方法, 修改ShapeBase如下:

代碼如下:

ShapeBase.prototype={
show:function()
{
alert("ShapeBaseshow");
},
initialize:function(){
this.oninit();
}
};


實現Rect類繼承.

代碼如下:

Rect.prototype=(newShapeBase).extend({
//添加新的方法
add:function(){
alert("Rectadd");
},
//使用這種方法可以重寫show方法
show:function(){
alert("Rectshow");
},
//實現虛方法
oninit:function(){
alert("Rectoninit");
}
})

㈡ 新手請教,如何將一段JS代碼封裝成一個方法

鑒於樓主欠缺編程經驗,我就先不說封裝成jQuery插件等高大上的做法了。單就論封裝成方法而言。

方法,也就是函數。是面向過程式語言一種代碼復用的初級手段,簡而言之,就是把重復的部分用函數封裝起來。

例如貓叫多遍,cat.meow(), 你總不可能寫對應次數的代碼,一般會寫成:


functionmeow(num){
for(vari=0;i<num;i++){
cat.meow()
}
}
meow(1000)

這就是一種最基礎的代碼復用。

當然,面向對象的語言也許有更簡單的 cat.meow(1000)

那麼,針對樓主的情況。逐步講一下各層次的方法。最簡單的用函數封裝一下就是:

functioneffect(srcDom,destDom,className){
$(srcDom).mouseenter(function(){
$(destDom).addClass(className)
}).mouseout(function(){
$(destDom).removeClass(className)
})
}

然後調用

effect('#plate-1','#plate-1hover','plate-1after')
effect('#plate-2','#plate-2hover','plate-2after')
effect('#plate-3','#plate-3hover','plate-3after')

鑒於樓主的DOM的ID和Class命名比較有規律,可以寫成這樣


functioneffect(name){
$('#'+name).mouseenter(function(){
$('#'+name+'hover').addClass(name+'after')
}).mouseout(function(){
$('#'+name+'hover').removeClass(name+'after')
})
}

然後調用

effect('plate-1')
effect('plate-2')
effect('plate-3')

但是這樣還是不夠通用,樓主應該看看事件方面有關事件委託的知識

什麼是javascript封裝,封裝的方法有幾種

JS雖然是一個面向對象的語言,但是不是典型的面向對象語言。Java/C++的面向對象是object - class的關系,而JS是object - object的關系,中間通過原型prototype連接,父類和子類形成一條原型鏈。本文通過分析JS的對象的封裝,再探討正確實現繼承的方式,然後討論幾個問題,最後再對ES6新引入的類class關鍵字作一個簡單的說明。

JS的類其實是一個函數function,由於不是典型的OOP的類,因此也叫偽類。理解JS的類,需要對JS里的function有一個比較好的認識。首先,function本身就是一個object,可以當作函數的參數,也可以當作返回值,跟普通的object無異。然後function可以當作一個類來使用,例如要實現一個String類

從輸出的結果來看,新的class還是沒有實現屬性私有的功能,見第27行。並且從第26行看出,所謂的class其實就是編譯器幫我們實現了上面復雜的過程,其本質是一樣的,但是讓代碼變得更加簡化明了。一個不同點是,多了static關鍵字,直接用類名調用類的函數。ES6的支持度還不高,最新的chrome和safari已經支持class,firefox的支持性還不太好。

最後,雖然一般的網頁的JS很多都是小工程,看似不需要封裝、繼承這些技術,但是如果如果能夠用面向對象的思想編寫代碼,不管工程大小,只要應用得當,甚至結合一些設計模式的思想,會讓代碼的可維護性和擴展性更高。所以平時可以嘗試著這樣寫。

㈣ 封裝一個自己的js庫

接下來,我講封裝一個仿jQuery的庫,主要包含jQuery中綁定,css,等方法,我講它定義為 "HQuery"

jQuery中的 $ 符號意味著什麼?
先思考一下jQuery庫中alert(typeof $)的結果,它是一個對象,也是一個函數
所以美元符$字面上是jQuery,其實就是一個jq對象,裡面可以接受函數,字元串,還要一種是對象(比如this)
給自己的Hquery填加$符號:

Hquery是基於面向對象實現的,所以我們需要先寫構造函數,為了方便遍歷和其他方法的操作,所有內容返回到一個數組中,這個數組衣服於Hquery對象存在,之後將為這個Hquery對象屬性添加方法

我們使用Hquery操作DOM等實現一系列的功能,選擇器是必不可少的,所有我們首先封裝好選擇器,這樣就可以能省去document.getElementsByClass等等麻煩的操作

其他的方法,我就不一一介紹了,下面直接給大家上一個多種方法封裝好的,大家k'y

㈤ js中什麼是函數封裝以及怎麼用

封裝最基本的意思就是對外提供簡單功能單一的方法,
比如一個方法根據不同的參數獲取不同的頁面元素
如點開頭的是查找class的元素,#開頭的是查找id,不加這兩個的是根據標簽查找
function
getElements()
{
//這里要根據開頭判斷返回數據
}
這個方法功能雖然多,但是功能不單一不如提供3個對外的方法
function
getElementById(id)
{
return
getElements("#"+id);
}
function
getByClass(cls)
{
return
getElements("."+cls);
}
function
getByTag(tag)
{
return
getElements(tag);
}
這樣別人一看方法名就明白這個方法怎麼使用了,這就是封裝的最簡單應用

㈥ js 常用公共類封裝

/**

* @用戶信息緩存,公共js封裝

* @Author maguangbo

* @Date 2019-07-18

* @Email [email protected]

* **/

export default (function() {

var com = {};

com.setCurrentUserInfo = function(userInfo) {

return uni.setStorageSync('userInfo', userInfo);

}

com.getCurrentuserInfo = function() {

return uni.getStorageSync('userInfo');

}

com.getToken = function(){

return uni.getStorageSync('tokens');

}

com.setToken = function(content){

return uni.setStorageSync('tokens',content);

}

var tokenInfos ={

"token": "",

"expiredTime": ""

}

com.getTokens = function(){

if(uni.getStorageSync('tokens')){

var tInfos = uni.getStorageSync('tokens');

tInfos.token && (tokenInfos.token = tInfos.token);

tInfos.expiredTime && (tokenInfos.expiredTime = tInfos.expiredTime);

}

return tokenInfos;

}

var userInfo = {

"id": '',

"userName": '',

"nickName": '',

"email": '',

"phone": '',

"identity": '',

"roleId": '',

"apiUserId": '',

"apiKey": '',

"createDate": ''

}

com.getUserInfos =function(){

if(uni.getStorageSync('userInfo')){

var infos = uni.getStorageSync('userInfo');

infos.id && (userInfo.id = infos.id);

infos.userName && (userInfo.userName = infos.userName);

infos.nickName && (userInfo.nickName = infos.nickName);

infos.email && (userInfo.email = infos.email);

infos.phone && (userInfo.phone = infos.phone);

infos.apiUserId && (userInfo.apiUserId = infos.apiUserId);

infos.apiKey && (userInfo.apiKey = infos.apiKey);

infos.createDate && (userInfo.createDate = infos.createDate);

return userInfo;

}

return false;

}

com.toast = (title, ration=1500, mask=false, icon='none')=>{

if(Boolean(title) === false){

return;

}

uni.showToast({

title,

ration,

mask,

icon

});

}

return com;

}())

這是一個常用的公共用戶信息封裝實體類,個人感覺很方便,如果有更好的的歡迎大佬指教!

㈦ 小程序端app.js封裝請求方法

//app.js

App({

  onLaunch: function () {

    let App = this;

    // 設置api地址

    App.setApiRoot();

  },

  globalData: {

    userInfo: null

  },

  api_root: '', // api地址

  appid:'',

  /**

   * 顯示失敗提示框

   */

  showError(msg, callback) {

    wx.showModal({

      title: '友情提示',

      content: msg,

      showCancel: false,

      success(res) {

        callback && callback();

      }

    });

  },

   /**

   * 設置api地址

   */

  setApiRoot() {

    let App = this;

    // App.api_root = config.config.host;

    let extConfig = wx.getExtConfigSync? wx.getExtConfigSync(): {}

    console.log(extConfig)

    App.appid = extConfig.attr.appid

    App.api_root = extConfig.attr.host;

  },

  /**

   * get請求

   */

  _get(url, data, success, fail, complete, check_login) {

    let App = this;

    wx.showNavigationBarLoading();

    // 構造請求參數

    data = Object.assign({

      token: wx.getStorageSync('token'),

      appid:App.appid  

    }, data);

    // if (typeof check_login === 'undefined')

    //   check_login = true;

    console.log(App.api_root) 

    // 構造get請求

    let request = () => {

      data.token = wx.getStorageSync('token');

      wx.request({

        url: App.api_root + url,

        header: {

          'content-type': 'application/json'

        },

        data,

        success(res) { 

          if (res.statusCode !== 200 || typeof res.data !== 'object') {

            console.log(res);

            App.showError('網路請求出錯'); 

            return false;

          } 

          if (res.data.code === -1) {

            // 登錄態失效, 重新登錄

            wx.hideNavigationBarLoading();

            App.doLogin(() => {

              App._get(url, data, success, fail);

            });

          } else if (res.data.code === 0) {

            App.showError(res.data.msg);

            return false;

          } else {

            success && success(res.data);

          }

        },

        fail(res) {

          // console.log(res);

          App.showError(res.errMsg, () => {

            fail && fail(res);

          });

        },

        complete(res) {

          wx.hideNavigationBarLoading();

          complete && complete(res);

        },

      });

    };

    // 判斷是否需要驗證登錄

    check_login ? App.doLogin(request) : request();

  },

  /**

   * post提交

   */

  _post_form(url, data, success, fail, complete) {

    wx.showNavigationBarLoading();

    let App = this;

    // 構造請求參數 

    data = Object.assign({

      token: wx.getStorageSync('token'), 

      appid:App.appid  

    }, data);

    data.token = wx.getStorageSync('token');

    wx.request({

      url: App.api_root + url,

      header: {

        'content-type': 'application/x-www-form-urlencoded',

      },

      method: 'POST',

      data,

      success(res) {

        if (res.statusCode !== 200 || typeof res.data !== 'object') {

          App.showError('網路請求出錯');

          return false;

        }

        if (res.data.code === -1) {

          // 登錄態失效, 重新登錄

          App.doLogin(() => {

            App._post_form(url, data, success, fail);

          });

          return false;

        } else if (res.data.code === 0) {

          App.showError(res.data.msg, () => {

            fail && fail(res);

          });

          return false;

        }

        success && success(res.data);

      },

      fail(res) {

        // console.log(res);

        App.showError(res.errMsg, () => {

          fail && fail(res);

        });

      },

      complete(res) {

        wx.hideLoading();

        wx.hideNavigationBarLoading();

        complete && complete(res);

      }

    });

  },

   /**

   * 驗證登錄

   */

  checkIsLogin() {

    return wx.getStorageSync('token') != '';

  }, 

  /**

   * 授權登錄

   */

  doLogin(callback) { 

    let App = this;

    // if (e.detail.errMsg !== 'getUserInfo:ok') {

    //   return false;

    // }

    wx.showLoading({

      title: "載入數據中...",

      mask: true

    }); 

    // 執行微信登錄

    wx.login({ 

      success(res) {

        // 發送用戶信息 

        App._post_form('login', {

          code: res.code,

        }, result => {

          // 記錄token user_id

          wx.setStorageSync('token', result.data.token,);

          // 執行回調函數

          callback && callback();

        }, false, () => {  

          wx.hideLoading();

        });

      }

    }); 

  }

})

㈧ 新人求助:js封裝的方式

第一種是擴展原型鏈,可以實現js的繼承(面向對象),這個用於給原有(已存在的,或者自己定義過的已存在的類添加原型方法時用)

第二種是最簡單的方法,注意:
在js文件中定義最外圍的function a時,a為windows的對象,可以用window.a或window['a']訪問
如果寫作
function method() {
function a() { ... }
a(); // 可以調用
}
a(); // 訪問不到

第三種稱為js的閉包,在閉包中定義的變數在外部都無法訪問,目的是為了在閉包中的變數不與外部的沖突。例如一個common.js文件由兩個人來修改時:
A程序員寫了:
var a = "aaa";
alert(a);
B程序員正好命名也是a,他寫了:
var a = "bbb";
alert(a);
那麼他們的代碼就沖突了。
為了解決這個問題,可以採用
A寫:
(function() {
var a = "aaa";
alert(a);
})();
B寫:
(function() {
var a = "bbb";
alert(a);
})();
另外第三個當中也用到了JS的JSON格式,或者也有說關聯數組,這樣定義:
var obj = {
attr: function() {...}
}; // JSON style
或者
var obj = {}; // var obj = new Object();
obj['attr'] = function() {...};
這個是直接定義一個類(默認為Object類)的對象。

㈨ js前端組件是怎麼封裝的

1、定義一個類

2、類中增加一個方法

3、body中定義一個dom節點

4、腳本中把dom節點和類定義結合起來,實現特定的組件功能


示例:

<script>
functionTestWidegt(did){//定義一個組件類
var_self=document.getElementById(did);//根據id獲取dom節點
this.addP=function(){//增加組件方法,這里就是添加一個節點
_self.innerHTML='<p>111</p>';//在dom節點下添加節點p
}
returnthis;//返回當前組件
}
functionTest(){
vart=newTestWidegt('dv');//根據佔位的dom節點定義組件
t.addP();//在佔位節點中增加顯示內容
}
</script>
<body>
<inputtype='button'value='測試組件'/>
<divid='dv'>111</div>組件佔位使用的dom節點
</body>

㈩ JS方法寫好了 用JS寫的腳本 然後我想封裝JS如何封裝

把你的js復制到記事本中,然後將記事本的拓展名(.txt)改為js(javascript)的拓展名(.js)就行了,當你在某個頁面(如:html、jsp、asp等)中要用到該js的方法,只需將你剛才封裝的js引入到頁面中就可以調用其中的方法了。

閱讀全文

與js怎麼封裝方法相關的資料

熱點內容
怎麼用彩紙折愛心的方法 瀏覽:515
如何瘦身減肥的方法 瀏覽:303
微量鈉離子可以用哪些方法 瀏覽:957
做雙眼皮有什麼方法消腫 瀏覽:799
踮腳尖運動時是如何呼吸方法 瀏覽:758
如何杜絕齲齒的方法 瀏覽:831
髕骨脫位手術後鍛煉方法 瀏覽:324
橡皮的製造方法圖片 瀏覽:998
主題里的圖標怎麼設置在哪裡設置方法 瀏覽:570
男生太陽穴長痘痘解決方法 瀏覽:216
田地種蔥頭正確方法 瀏覽:223
分析文學作品的方法 瀏覽:985
腫瘤診斷及治療方法 瀏覽:308
簡單的豐胸按摩方法 瀏覽:377
數字存儲精確時間間隔測量方法 瀏覽:595
魚刺卡喉正確處理方法的動作 瀏覽:631
怎麼預防新冠狀病毒的有效方法 瀏覽:227
如何科學減肥瘦身方法 瀏覽:391
蘋果二手手機可以刷機方法 瀏覽:237
格列齊特應該怎麼服用方法 瀏覽:261