js

Js apply 和 call 方法 详解

梦想的初衷 提交于 2020-02-27 01:32:41
我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享.. 如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1. apply和call的区别在哪里 2. 什么情况下用apply,什么情况下用call 3. apply的其他巧妙用法(一般在什么情况下可以使用apply) 我首先从网上查到关于apply和call的定义,然后用示例来解释这两个方法的意思和如何去用. apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数 obj:这个对象将代替Function类里this对象 args:这个是数组,它将作为参数传给Function(args-->arguments) call:和apply的意思一样,只不过是参数列表不一样. Function.call(obj,[param1[,param2[,…[,paramN]]]]) obj:这个对象将代替Function类里this对象 params:这个是一个参数列表 1. apply示例: <script type="text/javascript"> /

js实现图片上传预览功能

点点圈 提交于 2020-02-27 00:52:20
html: < div class = " aui-col-xs-3 " id = " img " > < div class = " aui-grid-label " > 添加图片 </ div > < div id = " upImg " > < input type = " file " name = " file " id = " chooseImage " /> </ div > < div id = " imgPreview " > < img src = " # " id = " cropedBigImg " /> </ div > </ div > css: #img { float : left ; margin-left : 20px ; width : 150px ; height : 60px ; } #upImg { position : absolute ; top : 0px ; left : 0px ; } #upImg input { width : 70px ; height : 60px ; opacity : 0 ; } #imgPreview { width : 80px ; height : 60px ; position : absolute ; left : 70px ; top : 0px ; } #cropedBigImg {

JS —— 闭包

纵饮孤独 提交于 2020-02-27 00:31:21
变量作用域 闭包的概念 闭包的用途 深入理解闭包 闭包的应用场景 Javascript的垃圾回收机制 JavaScript匿名函数详细介绍 变量作用域 两种变量作用域: 全局变量 局部变量 理解下面三段JS函数 var n = 999 ;    function f1 ( ) {     alert ( n ) ;    }    f1 ( ) ; // 999 function f1 ( ) {    var n = 999 ; } alert ( n ) ; // error function f1 ( ) {   n = 999 ; } f1 ( ) ; alert ( n ) ; // 999 返回顶层目录 闭包的概念 官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 通俗解释: JavaScript中所有的function都是一个闭包。 闭包就是能够读取其他函数内部变量的函数。 由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。 返回顶层目录 闭包的用途 闭包的两个用途: 一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

js将已有数组重新分组(将数组每10项分成一组)

时光总嘲笑我的痴心妄想 提交于 2020-02-26 20:15:36
项目中碰到的一个小需求:分页请求数据,一次请求60条,需要将后台返回的数组每10条分成一组渲染一个表格(表格使用的是ant-design-vue的table) 实现逻辑: var chunk = 10; var len = res.data.content.length; var result = []; for (let i = 10; i < len; i += chunk) { result.push(res.data.content.slice(i, i + chunk)) // 每10项分成一组 } result = result.map((item, index) => { //遍历,每组加上表头和data return { columns: [{ title: '列号', dataIndex: 'index', align: 'center', width: 60 }, { title: '特征', dataIndex: 'field', align: 'center', width: 110 }, { title: '分类', dataIndex: 'type', align: 'center', width: 110 }], data: item } }) this.tableData = result //表格渲染部分 <a-table v-for="(item

JS逆向某网站登录密码分析

让人想犯罪 __ 提交于 2020-02-26 19:32:40
声明: 本文仅供研究学习使用,请勿用于非法用途! 目标网站 aHR0cHM6Ly9hdXRoLmFsaXBheS5jb20vbG9naW4vaW5kZXguaHRt 今日目标网站是某知名支付网站,感觉自己有点飘了~~ 这里只解密密码的加密方式 请求分析 先看请求,输入账号,密码后点击登录,记得提前浏览器打开 F12 这里注意输入错误的密码,方便我们查看请求数据包 在浏览器的开发者工具界面,快捷键 Crtl+Shift+F 直接打开全局搜索, 定位加密 根据上面的搜索关键词 password= ,我在 index.js 文件种定位到了加密位置 getPassword,熟悉的 RSA 加密 打上断点后,重新发请求,果不其然,在断点处停下来了! 解密 之前有讲过一篇有关 RSA 加密的专题,这里可以直接将 RSA 相关的代码拷贝下来。我们主要来改写这个 getPassword 加密函数, 原函数如下,其中 n = e.alipayEncrypt(2, i, t) 是最后要返回的结果! function getPassword(t) { var e = new s.RSA; i = s.Base64.decode(this.options.TS) e.setPublicKey(this.options.PK); return e.alipayEncrypt(2, i, t);

6种JavaScript继承方式及优缺点

最后都变了- 提交于 2020-02-26 18:37:44
友情提示: 想要更好的理解JS继承方式,须了解构造函数、原型对象、实例化对象、原型链等概念 第一种:原型链继承 利用原型链的特点进行继承 function Parent(){ this.name = 'web前端'; this.type = ['JS','HTML','CSS']; } Parent.prototype.Say=function(){ console.log(this.name); } function Son(){}; Son.prototype = new Parent(); son1 = new Son(); son1.Say(); 以上例子解释: ①创建一个叫做Parent的构造函数,暂且称为父构造函数,里面有两个属性name、type ②通过Parent构造函数的属性(即原型对象)设置Say方法,此时,Parent有2个属性和1个方法 ③创建一个叫做Son的构造函数,暂且称为子构造函数 ④设置Son的属性(即原型对象)值为父构造函数Parent的实例对象,即子构造函数Son继承了父构造函数Parent,此时Son也有2个属性和1个方法 ⑤对Son构造函数进行实例化,结果赋值给变量son1,即son1为实例化对象,同样拥有2个属性和1个方法 ⑥输出son1的Say方法,结果为"web前端" 优点:可以实现继承 缺点: ①因为Son.prototype

js比对两个table的tbody的数据,一个字段是否有相同的,或其他

微笑、不失礼 提交于 2020-02-26 18:36:28
<html> <header> </header> <body> <!-- 装备清单 --> <div id="zbqd"> <table border="1" cellspacing="0" style=" border-collapse: collapse;font-size: 14px;"> <thead> <tr> <th colspan="3" height="40px;" style="width: 295px;">装备清单</th> <th colspan="1" align="center" style="width: 70px;"> <input type="button" id="ok" class="optInput" value="调拨" onclick="pushEq()" /> </th> </tr> </thead> <tbody id="qdtbody"> <tr> <th align='center' style='width: 120px;'>装备名称</th> <th align='center'>数量</th> <th align='center' style='width:47px'>调拨数</th> <th align='center' style='width: 156px;'>存放地址</th> </tr> <tr id="1">

js浅拷贝及深拷贝的几种方法

岁酱吖の 提交于 2020-02-26 18:13:12
一、浅拷贝 (1) Object.assign() Object.assign我们经常会用到合并对象,当然利用Object.assign性质我们也可以实现对象的拷贝。 var obj1 = {a: 1, b: 2} var obj2 = Object.assign({}, obj1) obj2.a = 4 console.log(obj1, obj2) 结果如图: 这里要注意的是Object.assign第一个参数必须是个空对象 (2) 解构赋值 var obj1 = {a: 1, b: 2} var obj2 = {...obj1} obj2.a = 4 console.log(obj1, obj2) 结果如图: 这里一样可以实现之前上面的结果。 但这两种拷贝有一个问题就是只能赋值一层,假设我们有如下数据结构 var obj1 = [{ name: '臧三', childs: ['小明', '小芳'] }] var obj2 = [...obj1] obj2[0].childs = [] console.log(obj1, obj2) 我们会发现打印出的结果如下: 上图可看出obj1,obj2 的结果均变了,这并不是我们想要的结果,所以我们要用到深拷贝。 二、深拷贝 (1) 利用json.stringify var obj1 = [{ name: '臧三', childs: [

js作用域以及变量提升

怎甘沉沦 提交于 2020-02-26 16:27:19
一、作用域 定义 作用域,即产生作用的特定区域。 javaScript的作用域,即js的变量或者函数产生作用的对应区域。也就是说区域内的可以访问区域外的变量和函数,但是区域外的则不能访问区域内的变量和函数。 分类 在ES5中,作用域分为两种:全局变量和局部变量。 (1)全局变量:所有地方均可访问(在函数外部声明的变量); (2)局部变量:只能在函数内部访问(在函数内部用var关键字声明的变量以及函数的形参)。 在ES6中,新增了块级作用域。 (3)块级作用域:只能在距离最近的大括号的作用范围内访问(仅限于let声明的变量)。 应用 // 全局变量 var i = 0 ; // 定义外部函数 function outer(){ // 访问全局变量 console.log(i); // (1) function inner1(){ console.log(i); // (2) } // inner2中定义局部变量 function inner2(){ console.log(i); // (3) var i = 1; console.log(i); // (4) } inner1(); inner2(); console.log(i); // (5) } outer();//输出结果依次为:0 0 undefined 1 0 注释(1)处:outer()内未声明和定义局部变量i,

js原生Ajax代码

拜拜、爱过 提交于 2020-02-26 15:17:01
var Ajax = { get : function ( url , fn ) { // XMLHttpRequest对象用于在后台与服务器交换数据 var xhr = new XMLHttpRequest ( ) ; xhr . open ( 'GET' , url , false ) ; xhr . onreadystatechange = function ( ) { // readyState == 4说明请求已完成 if ( xhr . readyState == 4 ) { if ( xhr . status == 200 || xhr . status == 304 ) { console . log ( xhr . responseText ) ; fn . call ( xhr . responseText ) ; } } } xhr . send ( ) ; } , // data应为'a=a1&b=b1'这种字符串格式,在jq里如果data为对象会自动将对象转成这种字符串格式 post : function ( url , data , fn ) { var xhr = new XMLHttpRequest ( ) ; xhr . open ( 'POST' , url , false ) ; // 添加http头,发送信息至服务器时内容编码类型 xhr .