源码+原理+手写框架,常用的前端JavaScript方法封装,阿里内部资料

Array.prototype.myReduce = function (func, initialValue) {

var len = this.length,

nextValue,

i;

if (!initialValue) {

// 没有传第二个参数

nextValue = this[0];

i = 1;

} else {

// 传了第二个参数

nextValue = initialValue;

i = 0;

}

for (; i < len; i++) {

nextValue = func(nextValue, this[i], i, this);

}

return nextValue;

}

30、获取url中的参数

============

function getWindonHref() {

var sHref = window.location.href;

var args = sHref.split(‘?’);

if (args[0] === sHref) {

return ‘’;

}

var hrefarr = args[1].split(‘#’)[0].split(‘&’);

var obj = {};

for (var i = 0; i < hrefarr.length; i++) {

hrefarr[i] = hrefarr[i].split(‘=’);

obj[hrefarr[i][0]] = hrefarr[i][1];

}

return obj;

}

31、数组排序

=======

// 快排 [left] + min + [right]

function quickArr(arr) {

if (arr.length <= 1) {

return arr;

}

var left = [],

right = [];

var pIndex = Math.floor(arr.length / 2);

var p = arr.splice(pIndex, 1)[0];

for (var i = 0; i < arr.length; i++) {

if (arr[i] <= p) {

left.push(arr[i]);

} else {

right.push(arr[i]);

}

}

// 递归

return quickArr(left).concat([p], quickArr(right));

}

// 冒泡

function bubbleSort(arr) {

for (var i = 0; i < arr.length - 1; i++) {

for (var j = i + 1; j < arr.length; j++) {

if (arr[i] > arr[j]) {

var temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

}

return arr;

}

function bubbleSort(arr) {

var len = arr.length;

for (var i = 0; i < len - 1; i++) {

for (var j = 0; j < len - 1 - i; j++) {

if (arr[j] > arr[j + 1]) {

var temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

return arr;

}

32、遍历Dom树

=========

// 给定页面上的DOM元素,将访问元素本身及其所有后代(不仅仅是它的直接子元素)

// 对于每个访问的元素,函数讲元素传递给提供的回调函数

function traverse(element, callback) {

callback(element);

var list = element.children;

for (var i = 0; i < list.length; i++) {

traverse(list[i], callback);

}

}

33、原生js封装ajax

=============

function ajax(method, url, callback, data, flag) {

var xhr;

flag = flag || true;

method = method.toUpperCase();

if (window.XMLHttpRequest) {

xhr = new XMLHttpRequest();

} else {

xhr = new ActiveXObject(‘Microsoft.XMLHttp’);

}

xhr.onreadystatechange = function () {

if (xhr.readyState == 4 && xhr.status == 200) {

console.log(2)

callback(xhr.responseText);

}

}

if (method == ‘GET’) {

var date = new Date(),

timer = date.getTime();

xhr.open(‘GET’, url + ‘?’ + data + ‘&timer’ + timer, flag);

xhr.send()

} else if (method == ‘POST’) {

xhr.open(‘POST’, url, flag);

xhr.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);

xhr.send(data);

}

}

34、异步加载script

=============

function loadScript(url, callback) {

var oscript = document.createElement(‘script’);

if (oscript.readyState) { // ie8及以下版本

oscript.onreadystatechange = function () {

if (oscript.readyState === ‘complete’ || oscript.readyState === ‘loaded’) {

callback();

}

}

} else {

oscript.onload = function () {

callback()

};

}

oscript.src = url;

document.body.appendChild(oscript);

}

35、cookie管理

===========

var cookie = {

set: function (name, value, time) {

document.cookie = name + ‘=’ + value + ‘; max-age=’ + time;

return this;

},

remove: function (name) {

return this.setCookie(name, ‘’, -1);

},

get: function (name, callback) {

var allCookieArr = document.cookie.split('; ');

for (var i = 0; i < allCookieArr.length; i++) {

var itemCookieArr = allCookieArr[i].split(‘=’);

if (itemCookieArr[0] === name) {

return itemCookieArr[1]

}

}

return undefined;

}

}

36、实现bind()方法

=============

Function.prototype.myBind = function (target) {

var target = target || window;

var _args1 = [].slice.call(arguments, 1);

var self = this;

var temp = function () {};

var F = function () {

var _args2 = [].slice.call(arguments, 0);

var parasArr = _args1.concat(_args2);

return self.apply(this instanceof temp ? this : target, parasArr)

}

temp.prototype = self.prototype;

F.prototype = new temp();

return F;

}

37、实现call()方法

=============

Function.prototype.myCall = function () {

var ctx = arguments[0] || window;

ctx.fn = this;

var args = [];

for (var i = 1; i < arguments.length; i++) {

args.push(arguments[i])

}

var result = ctx.fn(…args);

delete ctx.fn;

return result;

}

38、实现apply()方法

==============

Function.prototype.myApply = function () {

var ctx = arguments[0] || window;

ctx.fn = this;

if (!arguments[1]) {

var result = ctx.fn();

delete ctx.fn;

return result;

}

var result = ctx.fn(…arguments[1]);

delete ctx.fn;

return result;

}

39、防抖

=====

function debounce(handle, delay) {

var timer = null;

return function () {

var _self = this,

_args = arguments;

clearTimeout(timer);

timer = setTimeout(function () {

handle.apply(_self, _args)

}, delay)

}

}

40、节流

=====

function throttle(handler, wait) {

var lastTime = 0;

return function (e) {

var nowTime = new Date().getTime();

if (nowTime - lastTime > wait) {

handler.apply(this, arguments);

lastTime = nowTime;

}

}

}

41、requestAnimFrame兼容性方法

========================

window.requestAnimFrame = (function () {

return window.requestAnimationFrame ||

window.webkitRequestAnimationFrame ||

window.mozRequestAnimationFrame ||

function (callback) {

window.setTimeout(callback, 1000 / 60);

};

})();

42、cancelAnimFrame兼容性方法

=======================

window.cancelAnimFrame = (function () {

return window.cancelAnimationFrame ||

window.webkitCancelAnimationFrame ||

window.mozCancelAnimationFrame ||

function (id) {

window.clearTimeout(id);

};

})();

43、jsonp底层方法

============

function jsonp(url, callback) {

var oscript = document.createElement(‘script’);

if (oscript.readyState) { // ie8及以下版本

oscript.onreadystatechange = function () {

if (oscript.readyState === ‘complete’ || oscript.readyState === ‘loaded’) {

callback();

}

}

} else {

oscript.onload = function () {

callback()

};

}

oscript.src = url;

document.body.appendChild(oscript);

}

44、获取url上的参数

============

function getUrlParam(sUrl, sKey) {

var result = {};

sUrl.replace(/(\w+)=(\w+)(?=[&|#])/g, function (ele, key, val) {

if (!result[key]) {

result[key] = val;

} else {

var temp = result[key];

result[key] = [].concat(temp, val);

}

})

if (!sKey) {

return result;

} else {

return result[sKey] || ‘’;

}

}

45、格式化时间

========

function formatDate(t, str) {

var obj = {

yyyy: t.getFullYear(),

yy: (“” + t.getFullYear()).slice(-2),

M: t.getMonth() + 1,

MM: (“0” + (t.getMonth() + 1)).slice(-2),

d: t.getDate(),

dd: (“0” + t.getDate()).slice(-2),

H: t.getHours(),

HH: (“0” + t.getHours()).slice(-2),

h: t.getHours() % 12,

hh: (“0” + t.getHours() % 12).slice(-2),

m: t.getMinutes(),

mm: (“0” + t.getMinutes()).slice(-2),

s: t.getSeconds(),

ss: (“0” + t.getSeconds()).slice(-2),

w: [‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’][t.getDay()]

};

return str.replace(/([a-z]+)/ig, function ($1) {

return obj[$1]

});

}

46、验证邮箱的正则表达式

=============

function isAvailableEmail(sEmail) {

var reg = /^([\w+.])+@\w+([.]\w+)+$/

return reg.test(sEmail)

}

47、函数柯里化

========

//是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术

function curryIt(fn) {

var length = fn.length,

args = [];

var result = function (arg) {

args.push(arg);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

ES6

  • 列举常用的ES6特性:

  • 箭头函数需要注意哪些地方?

  • let、const、var

  • 拓展:var方式定义的变量有什么样的bug?

  • Set数据结构

  • 拓展:数组去重的方法

  • 箭头函数this的指向。

  • 手写ES6 class继承。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

微信小程序

  • 简单描述一下微信小程序的相关文件类型?

  • 你是怎么封装微信小程序的数据请求?

  • 有哪些参数传值的方法?

  • 你使用过哪些方法,来提高微信小程序的应用速度?

  • 小程序和原生App哪个好?

  • 简述微信小程序原理?

  • 分析微信小程序的优劣势

  • 怎么解决小程序的异步请求问题?

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 箭头函数需要注意哪些地方?

  • let、const、var

  • 拓展:var方式定义的变量有什么样的bug?

  • Set数据结构

  • 拓展:数组去重的方法

  • 箭头函数this的指向。

  • 手写ES6 class继承。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

微信小程序

  • 简单描述一下微信小程序的相关文件类型?

  • 你是怎么封装微信小程序的数据请求?

  • 有哪些参数传值的方法?

  • 你使用过哪些方法,来提高微信小程序的应用速度?

  • 小程序和原生App哪个好?

  • 简述微信小程序原理?

  • 分析微信小程序的优劣势

  • 怎么解决小程序的异步请求问题?

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值