js

详解js中的apply与call的用法

删除回忆录丶 提交于 2020-01-27 22:25:48
前言 call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了 改变函数体内部 this 的指向 。 call 和 apply 二者的作用完全一样,只是接受参数的方式不太一样。 方法定义 apply Function.apply(obj,args) 方法能接收两个参数: obj: 这个对象将代替Function类里this对象 args: 这个是数组或类数组,apply方法把这个集合中的元素作为参数传递给被调用的函数。 call call方法 与 apply方法 的第一个参数是一样的,只不过第二个参数是一个参数列表 在非严格模式下当我们第一个参数传递为null或undefined时,函数体内的this会指向默认的宿主对象,在浏览器中则是window 1 2 3 4 5 var test = function (){ console.log( this ===window); } test.apply( null ); //true test.call(undefined); //true 用法 "劫持"别人的方法 此时 foo 中的 logName 方法将被bar引用 , this 指向了 bar 1 2 3 4 5 6 7 8 9 10 var foo = { name: "mingming" , logName:

V8 引擎是如何工作的?

老子叫甜甜 提交于 2020-01-27 21:59:51
V8 引擎是如何工作的? CSDN ​ 已认证的官方帐号 17 人赞同了该文章 作者 | Fundebug 来源|Fundebug 最近,JavaScript生态系统又多了2个非常硬核的项目。 大神Fabrice Bellard发布了一个新的JS引擎QuickJS,可以将JavaScript源码转换为C语言代码,然后再使用系统编译器(gcc或者clang)生成可执行文件。 Facebook为React Native开发了新的JS引擎Hermes,用于优化安卓端的性能。它可以在构建APP的时候将JavaScript源码编译为Bytecode,从而减少APK大小、减少内存使用,提高APP启动速度。 作为JavaScript程序员,只有极少数人有机会和能力去实现一个JS引擎,但是理解JS引擎还是很有必要的。本文将介绍一下V8引擎的原理,希望可以给大家一些帮助。 JavaScript引擎 我们写的JavaScript代码直接交给浏览器或者Node执行时,底层的CPU是不认识的,也没法执行。CPU只认识自己的指令集,指令集对应的是汇编代码。写汇编代码是一件很痛苦的事情,比如,我们要计算N阶乘的话,只需要7行的递归函数: function factorial(N) { if (N === 1) { return 1; } else { return N * factorial(N - 1);

【worker】js中的多线程

时光总嘲笑我的痴心妄想 提交于 2020-01-27 17:01:06
因为下个项目中要用到一些倒计时的功能,所以就提前准备了一下,省的到时候出现一下界面不友好和一些其他的事情。正好趁着这个机会也加深一下html5中的多线程worker的用法和理解。 Worker简介 JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。这些都是我们所公知的。但是随着业务的不断增加,只是单纯的单线程模式已经可能无法满足我们的需求了。于是在html5中新增了后台任务worker API。 w3c中的介绍:web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。 worker就是为了JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。开启后台线程,在不影响前台线程的前提下做一些耗时或者异步的操作。因为是不同的线程,所以主线程与worker线程互不干扰。也不会相互打断。所以在一些场景可以提高页面的流程性。Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用

js获取地址栏参数值

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-27 15:57:18
采用正则表达式获取地址栏参数: function GetQueryString(name) { var reg = new RegExp( "(^|&)" + name + "=([^&]*)(&|$)" ); var r = window.location.search.substr(1).match(reg); if (r!= null ) return unescape(r[2]); return null ; } // 调用方法 alert(GetQueryString( "参数名1" )); alert(GetQueryString( "参数名2" )); alert(GetQueryString( "参数名3" )) 下面举一个例子: 若地址栏URL为:abc.html?id=123&url=http://www.maidq.com 那么,但你用上面的方法去调用:alert(GetQueryString("url")); 则会弹出一个对话框:内容就是 http://www.maidq.com 如果用:alert(GetQueryString("id"));那么弹出的内容就是 123 啦; 当然如果你没有传参数的话,比如你的地址是 abc.html 后面没有参数,那强行输出调用结果有的时候会报错: 所以我们要加一个判断 ,判断我们请求的参数是否为空,首先把值赋给一个变量:

利用html,css,js制作分割页面

不打扰是莪最后的温柔 提交于 2020-01-27 14:58:01
利用html,css,js制作分割页面 html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>分割界面</title> <link rel="stylesheet" href="./分割界面.css" /> </head> <body> <div class="container"> <div class="split left"> <!-- <img src="../imgs/pexels-photo-3551207.jpg" alt="" class="left" /> --> <h1>秋天</h1> <a href="#" class="button">秋天</a> </div> <div class="split right"> <!-- <img src="../imgs/pexels-photo-3568792.jpg" alt="" class="left" /> --> <h1>夏天</h1> <a href

js array push()方法

非 Y 不嫁゛ 提交于 2020-01-27 14:21:40
JavaScript push() 方法 JavaScript Array 对象参考手册 定义和用法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。 语法 arrayObject.push(newelement1,newelement2,....,newelementX) 参数 描述 newelement1 必需。要添加到数组的第一个元素。 newelement2 可选。要添加到数组的第二个元素。 newelementX 可选。可添加多个元素。 返回值 把指定的值添加到数组后的新长度。 说明 push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而不是创建一个新的数组。push() 方法和 pop() 方法使用数组提供的先进后出栈的功能。 提示和注释 注释: 该方法会改变数组的长度。 提示: 要想数组的开头添加一个或多个元素,请使用 unshift() 方法。 实例 在本例中,我们将创建一个数组,并通过添加一个元素来改变其长度: <script type="text/javascript"> var arr = new Array(3) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas" document.write(arr + "<br />")

js中const,var,let区别

会有一股神秘感。 提交于 2020-01-27 13:09:38
今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章。主要内容是:js中三种定义变量的方式const, var, let的区别。 1.const定义的变量不可以修改,而且必须初始化。 1 const b = 2;//正确 2 // const b;//错误,必须初始化 3 console.log('函数外const定义b:' + b);//有输出值 4 // b = 5; 5 // console.log('函数外修改const定义b:' + b);//无法输出 2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错。 1 var a = 1; 2 // var a;//不会报错 3 console.log('函数外var定义a:' + a);//可以输出a=1 4 function change(){ 5 a = 4; 6 console.log('函数内var定义a:' + a);//可以输出a=4 7 } 8 change(); 9 console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4 3.let是块级作用域,函数内部使用let定义后,对函数外部无影响。 1 let c = 3; 2 console.log('函数外let定义c:' + c);//输出c=3 3 function change()

Vue.js 引入外部js方法

烂漫一生 提交于 2020-01-27 13:09:04
1、外部文件config.js 第一种写法 //常量的定义 const config = { baseurl:'http://172.16.114.5:8088/MGT2' } //函数的定义 function formatXml(text) {   return text } //导出 {常量名、函数名} export {config,formatXml} 第二种写法 //常量的定义 export const config = { baseurl:'http://172.16.114.5:8088/MGT2' } //函数的定义 export function formatXml(text) {   return text } 2、引入config.js里面的常量和方法 import {config,formatXml} from '../config'//记得带上{}花括号 来源: https://www.cnblogs.com/qiu-Ann/p/7463484.html

面向对象的js编程 Call和apply方法

瘦欲@ 提交于 2020-01-27 10:42:13
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别。  一、方法定义   1、call 方法    语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])    参数 thisObj 可选项。将被用作当前对象的对象。 arg1, arg2, , argN 可选项。将被传递方法参数序列。   说明    call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。    如果没有提供 thisObj 参数,那么 Global 对象被用作thisObj。说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。   2、apply方法   语法:apply([thisObj[,argArray]])    定义:应用某一对象的一个方法,用另一个对象替换当前对象。    说明:    如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。    如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。   二、常用实例   实例1

[JS]笔记11之正则表达式

一个人想着一个人 提交于 2020-01-27 10:25:15
-->什么是正则表达式 -->定义正则 -->正则的索引 -->元字符 -->方括号、量词、其他符号 -->RegExp 对象的方法 -->String 对象方法 1、定义: 正则用于规定在文本中检索的内容,它是对字符串执行模式匹配的强大工具 RegExp(正则表达式) 对象的语法: new RegExp( pattern , attributes ); pattern 为一个字符串或匹配规则 attributes 为可选字符串,包含属性g、i 和 m g :代表全局匹配 (继续往下匹配) i :代表不区分大小写匹配 m:代表多行匹配,只对^和$模式有用 2、定义正则表达式 定义正则表达式有两种形式: 构造函数方式: new RegExp(pattern, attributes); 例:var reg=new RegExp(“ abc ","g"); 构造函数中的正则可以是 常量字符串 或 一个js变量 普通方式:/pattern/attributes(/正则/属性) 例:var reg=/abc/g; 普通方式中的正则必须是一个常量字符串 3、正则的索引 每个正则表达式都有一个 lastIndex 属性,用于记录上一次匹配结束的位置(索引值)。 获取 reg.lastIndex 设置 reg.lastIndex=0; 4、元字符 \d : 匹配任意一个数字,0~9 中的任意一个