如初的博客🥝
call、apply、bind的区别
call()和apply() 介绍 这两个方法都是函数对象的方法,需要通过函数对象来调用。 当函数调用call()和apply()时,函数都会立即执行。 都可以用来改变函数的this对象的指向。 第一个参数都是this要指向的对象(函数执行时,this将指向这个对象),后续参数用来传实参。 显式绑定this JS提供的绝大多数函数以及我们自己创建的所有函数,都可以使用call 和apply方法。 它们的第一个参数是一个对象。因为你可以直接指定 this 绑定的对象,因此我们称之为显式绑定。 例1: 12345678910function foo() { console.log(this.a);}var obj = { a: 2};// 将 this 指向 objfoo.apply(obj); //打印结果:2 第一个参数的传递 1、thisObj不传或者为null、undefined时,函数中的this会指向window对象(非严格模式)。 2、传递一个别的函数名时,函数中的this将指向这个函数的引用。 3、传递的值为数 ...
WebSocket
WebSocket 的引入 背景分析 HTTP协议是无状态的,服务器只会响应来自客户端的请求,但是它与客户端之间不具备持续连接。 当用户在浏览器上进行操作时,可以请求服务器上的api;但是反过来却不可能:服务器端发生了一个事件,无法将这个事件的信息实时主动地通知客户端。只有在客户端查询服务器当前状态时,所发生事件的信息才会从服务器传递到客户端。 那怎么去实时地知道服务器的状态呢?方法有两个: (1)轮询:客户端每隔很短的时间,都会对服务器发出请求,查看是否有新的消息,只要轮询速度足够快,例如1秒,就能给人造成交互是实时进行的印象。这种做法是无奈之举,实际上对服务器、客户端双方都造成了大量的性能浪费。 (2)长连接:客户端只请求一次,但是服务器会将连接保持,不会返回结果。当服务器有了新数据时,实时地发给客户端,而一直保持挂起状态。这种做法的也造成了大量的性能浪费。 WebSocket 协议 最新的 HTML5协议,制定了 WebSocket 协议标准,允许客户端和服务器端以全双工的方式进行通信。 WebSocket 的原理非常简单:利用HTTP请求产生握手,HTTP头部含有 WebSoc ...
this
this this的作用 this可以帮我们简化很多代码。比如xiaoming.name、xiaoming.age可以直接写成this.name、this.age。 特别是当我们不知道一个对象是什么,或者这个对象没有名字但又很想调用它的时候,就会使用到this对象。 举例: 遍历DOM对象,绑定click事件,调用当前点击的对象的id,而不是所有对象的id。 代码: 123456789101112131415161718192021222324252627282930313233343536373839404142<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" <title>Document</title> <style> div { w ...
whistle网络抓包
手机设置代理 连接好指定的wifi后,点击那个wifi里的设置,将「代理」那一项,设置为手动,然后输入ip(电脑上的ip)、端口号(8899)。然后就可以通过电脑上的whistle工具,查看手机的网页请求。 注意,要保证手机和电脑在同一个网络下。 捕获和拦截https请求 whistle安装证书后,可以拦截 https 请求。但是,我现在又不想拦截https请求了,该怎么卸载证书呢? 我发现,证书无法卸载,正确的操作是: 上图中,把红框部分,去掉勾选,就不捕获https了。谢谢azh童鞋。 参考链接: Android 手机如何设置http代理? 使用 Whistle 对 iOS HTTPS 进行抓包 移动端调试神器:eruda 手机连接代理时,如何看console.log的日志信息? 现在,代码里有console.log,如果是在电脑浏览器上看,可以直接在控制台查看console.log的内容。但是,如果手机连接代理,在手机上打开网页的话,要怎么查看console.log的内容呢?具体做法如下: (1)在 whistle中,新建一个名叫Eruda H5的代理,代理 ...
作用域和闭包
前言 面试问题: 说一下对变量提升的理解 说明this的几种不同的使用场景 创建10个<a>标签,点击的时候弹出来对应的序号 如何理解作用域 实际开发中闭包的应用 涉及到的知识点: 执行上下文 this 作用域 作用域链 闭包 执行上下文 执行上下文主要有两种情况: 全局代码: 一段<script>标签里,有一个全局的执行上下文。所做的事情是:变量定义、函数声明 函数代码:每个函数里有一个上下文。所做的事情是:变量定义、函数声明、this、arguments PS:注意“函数声明”和“函数表达式”的区别。 全局执行上下文 在执行全局代码前将window确定为全局执行上下文。 (1)对全局数据进行预处理:(并没有赋值) var定义的全局变量==>undefined, 添加为window的属性 function声明的全局函数==>赋值(fun), 添加为window的方法 this==>赋值(window) (2)开始执行全局代码 函数执行上下文 在调用函数, 准备执行函 ...
创建对象和继承
创建对象的几种方式 通过Object 12345678910111213141516171819202122232425262728293031323334353637<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>01_Object构造函数模式</title></head><body><!--方式一: Object构造函数模式 * 套路: 先创建空Object对象, 再动态添加属性/方法 * 适用场景: 起始时不确定对象内部数据 * 问题: 语句太多--><script type="text/javascript"> /* 一个人: name:"Tom", age: 12 */ // 先创建空Object对象 var p = new Object() ...
浅拷贝和深拷贝
浅拷贝 对于对象或数组类型,当我们将a赋值给b,然后更改b中的属性,a也会随着变化。 也就是说,a和b指向了同一块堆内存,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝。 深拷贝 那么相应的,如果给b放到新的内存中,将a的各个属性都复制到新内存里,就是深拷贝。 也就是说,当b中的属性有变化的时候,a内的属性不会发生变化。 参考链接: 深拷贝与浅拷贝的实现(一) javaScript中浅拷贝和深拷贝的实现
空降评论复制本文地址
随便逛逛昼夜切换关于博客美化设置切换全屏打印页面