我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript常用方法和封装详情

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript常用方法和封装详情

1.字符串相关

1.1 format方法

在各种编程语言中,字符串的format方法是比较常见的,以下通过js扩展的方式,实现了js版本的format方法。目前貌似还没有浏览器支持这一个方法。

if(!String.prototype.format ){
    String.prototype.format = function() {
        var e = arguments;
        return this.replace(/{(\d+)}/g,function(t, n) {
            return typeof e[n] != "undefined" ? e[n] : t;
        })
    };
} 

例子:

var template = "今天的天气很{0},大家一起去{1}!";
alert(template.format("晴朗","郊游"));

效果:

2.数组相关

1.2 forEach(callback,context) 操作数组中的每一个元素

ie9以上的浏览器,以及其他非IE浏览器都支持这一方法。

以下是兼容性的扩展写法:


if (!Array.prototype.forEach && typeof Array.prototype.forEach !== "function") {
    Array.prototype.forEach = function(callback, context) {
       // 遍历数组,在每一项上调用回调函数,这里使用原生方法验证数组。
       if (Object.prototype.toString.call(this) === "[object Array]") {
           var i,len;
           //遍历该数组所有的元素
           for (i = 0, len = this.length; i < len; i++) {
               if (typeof callback === "function"  && Object.prototype.hasOwnProperty.call(this, i)) {
                   if (callback.call(context, this[i], i, this) === false) {
                       break; // or return;
                   }
               }
           }
       }
    };
}

例子:

var drinks = ['雪碧','可乐','脉动','红牛','农夫山泉'];
        
var context = {
    str1 : '【',
    str2 : '】'
};
        
drinks.forEach(function(item){
    console.log(this.str1 + item + this.str2);
},context);

效果:

这个方法在各大浏览器都得到了较好的支持。

1.3 indexOf(searchvalue,fromindex) 查询数组中某一个值的下标

ie9以上的浏览器,以及其他非IE浏览器都支持这一方法。

以下是兼容性的扩展写法:

//获取某元素在数组中第一次出现的下标
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(searchElement, fromIndex) {
    var k;
    // 1. Let O be the result of calling ToObject passing
    //    the this value as the argument.
    if (this == null) {
      throw new TypeError('"this" is null or not defined');
    }
 
    var O = Object(this);
 
    // 2. Let lenValue be the result of calling the Get
    //    internal method of O with the argument "length".
    // 3. Let len be ToUint32(lenValue).
    var len = O.length >>> 0;
 
    // 4. If len is 0, return -1.
    if (len === 0) {
      return -1;
    }
 
    // 5. If argument fromIndex was passed let n be
    //    ToInteger(fromIndex); else let n be 0.
    var n = +fromIndex || 0;
 
    if (Math.abs(n) === Infinity) {
      n = 0;
    }
 
    // 6. If n >= len, return -1.
    if (n >= len) {
      return -1;
    }
 
    // 7. If n >= 0, then Let k be n.
    // 8. Else, n<0, Let k be len - abs(n).
    //    If k is less than 0, then let k be 0.
    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
 
    // 9. Repeat, while k < len
    while (k < len) {
      // a. Let Pk be ToString(k).
      //   This is implicit for LHS operands of the in operator
      // b. Let kPresent be the result of calling the
      //    HasProperty internal method of O with argument Pk.
      //   This step can be combined with c
      // c. If kPresent is true, then
      //    i.  Let elementK be the result of calling the Get
      //        internal method of O with the argument ToString(k).
      //   ii.  Let same be the result of applying the
      //        Strict Equality Comparison Algorithm to
      //        searchElement and elementK.
      //  iii.  If same is true, return k.
          if (k in O && O[k] === searchElement) {
            return k;
          }
          k++;
        }
        return -1;
      };
    }

例子:

var index = drinks.indexOf('雪碧');
alert(index);//0

类似的还有lastIndexOf,用于获取数组中某个元素最后一次出现的位置。如果数组没有这个元素,则返回-1。

该方法的实现:

//获取某元素在数组中最后一次出现的下标
if (!Array.prototype.lastIndexOf) {
      Array.prototype.lastIndexOf = function(searchElement ) {
    'use strict';
 
    if (this === void 0 || this === null) {
      throw new TypeError();
    }
 
    var n, k,
        t = Object(this),
        len = t.length >>> 0;
    if (len === 0) {
      return -1;
    }
 
    n = len - 1;
    if (arguments.length > 1) {
      n = Number(arguments[1]);
      if (n != n) {
        n = 0;
      }
      else if (n != 0 && n != (1 / 0) && n != -(1 / 0)) {
        n = (n > 0 || -1) * Math.floor(Math.abs(n));
      }
    }
 
    for (k = n >= 0
          ? Math.min(n, len - 1)
          : len - Math.abs(n); k >= 0; k--) {
      if (k in t && t[k] === searchElement) {
        return k;
      }
    }
    return -1;
  };
}

通过这两个方法,我们可以来做一些有意思的事情了。比如,判断一个对象是否为数组?

IE9 以上的浏览器,已经支持通过Array.isArray()来验证一个对象是否为数组了。

比如:

var result = Array.isArray([]);
alert(typeof []);//object
alert(result); //true

那么,如果我们自己来实现,又该如何做呢?下面给出一个简单思路,

简单模拟一下这个过程:

//首先,让我们来看一看数组的构造器是咋样的?
console.log([].constructor.toString());
 

于是便有了

 var Array = function(){
 
}
 
Array.isArray = function(obj){
    return obj.constructor.toString().indexOf('Array') != -1;
}
 
var result = Array.isArray([]); 
alert(result); //true

虽然取巧了点,不过目的确实达到了。

3.数组封装

通过数组的一些基本方法,我们可以开始自己模拟一下java中的ArrayList

代码如下:

//模拟ArrayList
function ArrayList(){
    var arr = []; //用于保存数据的数组
    var length = 0; //数组的长度,默认为0
    
    
    this.isEmpty = function(){
        return length == 0;
    }
    
    
    
    this.size = function(){
        return length;
    }
    
     
    this.contains = function(obj){
        if(arr.indexOf(obj) != -1){
            return true;
        }
        return false;
    }
    
    
   this.add = function(obj){
    length = length + 1;
    arr.push(obj);
   }
   
   
   this.remove = function(obj,deleteAll){
        var len = arr.length;
        for(var i = 0 ;i < len ;i++){
            if(arr[i] == obj){
                arr.splice(i,1);
                length = length - 1;
                if(!deleteAll){
                    break;
                }
            }
        }
   }
   
   
   
   this.get = function(index){
    if(index > length - 1){
        return null;
    }
    return arr[index];
   }
   
   
   this.toArray = function(){
     return arr;
   }
   
   
   this.indexOf = function(obj){
     var rstArr = [];
     var count = 0;
     for(var i = 0 ;i < length ;i++){
        if(obj == arr[i]){
            rstArr[count++] = i;
        }
     }
     if(count == 1){
        return rstArr[0];
     }
     return rstArr;
   }
   
   this.toString = function(){
    return arr.toString();  
   }
}
 
//测试代码
var list = new ArrayList();
list.add('张三');
list.add('李四');
list.add('王五');
list.add('赵六');
list.add('王五');
console.log(list.size());
console.log(list.toString());
console.log(list.contains('张三'));
list.remove('王五',true); //null,undefined,''
console.log(list.toString());
console.log(list.get(0));
console.log(list.get(1));
console.log(list.get(2));
console.log(list.size());
 
console.log(list.toArray());
list.add('张三');
list.add('张三');
console.log(list.toArray());
console.log(list.indexOf('张三'));
console.log(list.indexOf('赵六'));

运行结果:

到此这篇关于JavaScript常用方法和封装详情的文章就介绍到这了,更多相关JavaScript方法和封装内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript常用方法和封装详情

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript常用方法和封装实例分析

这篇文章主要介绍了JavaScript常用方法和封装实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript常用方法和封装实例分析文章都会有所收获,下面我们一起来看看吧。1.字符串相关1.1
2023-06-29

CSS和JavaScript常用工具封装方法是什么

这篇文章主要介绍“CSS和JavaScript常用工具封装方法是什么”,在日常操作中,相信很多人在CSS和JavaScript常用工具封装方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS和Jav
2023-06-04

RedisTemplate常用方法封装

RedisTemplate常用方法封装序列化和配置package com.gitee.ccsert.mall.common.redis.config;import com.fasterxml.jackson.annotation.JsonAutoDetect;
RedisTemplate常用方法封装
2014-05-04

CSS常用的封装方法有哪些

小编给大家分享一下CSS常用的封装方法有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. pc-reset PC样式初始化html { line-height: 1.15;
2023-06-08

nodejs各类数据库常用方法封装

在Node.js中,常见的数据库有MySQL、MongoDB、Redis等。下面是各类数据库常用方法的封装示例。1. MySQL数据库常用方法封装示例:```javascriptconst mysql = require('mysql');
2023-09-21

ThinkPHP封装方法的概念和使用方法是什么

今天小编给大家分享一下ThinkPHP封装方法的概念和使用方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是封装
2023-07-05

php分页封装和调用的方法是什么

在PHP中,可以使用以下方法来封装和调用分页功能:1. 分页封装方法:- 创建一个名为`Pagination`的类,该类将包含分页所需的各种属性和方法。- 在类中定义属性,如当前页码、每页显示数量、总记录数等。- 实现一个初始化方法,用于设
2023-09-27

matlab函数封装和调用的方法是什么

在Matlab中,可以通过创建函数文件来封装函数,并通过函数名调用函数。以下是具体的方法:1. 打开Matlab编辑器,选择新建函数文件。在弹出的对话框中输入函数名和保存路径。2. 在编辑器中编写函数代码。函数代码包括输入参数、输出参数和函
2023-10-08

Vue封装通过API调用的组件的方法详解

在日常业务开发中我们会经常封装一些业务组件,下面这篇文章主要给大家介绍了关于Vue封装通过API调用的组件的方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
2022-12-26

编程热搜

目录