首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

详解JavaScript的this

在平时的代码,相信大家经常用到 this,可是你真的明白此 this 真的是你认为的 this 吗?...今天柚子君总结了一下平时用到的 this 的场景,大家走过路过不要错过啊~ 首先咱们先来看一下《JavaScript 高级程序设计》上是怎么说的。...箭头函数没有 this 绑定,必须通过查找作用域链来决定其值。...关于 this 的使用和体会还是要在平时运用理解,先了解其原理,那么在使用的时候就如鱼得水啦。...---- 往期精选文章 一小时内搭建一个全栈Web应用框架 全栈工程师技能大全 一个治愈JavaScript疲劳的学习计划 推翻JavaScript的三座大山:作用域篇 掌握Chrome开发工具:新一代前端开发技术

90450
您找到你想要的搜索结果了吗?
是的
没有找到

JavaScript的this详解

如何来进行理解呢,来看几个实例 1)全局函数的this指向 function test(){ alert(this);//test这个函数没有所有者,因此此时this指向的是window } 2)对象方法的...输出true,h5course.test表示的是test这个函数的所有者是对象h5course,因此this应当是指向h5course的 } 3)绑定函数时的this 如下代码,test1和test2this...h5course.test1 = function(){ alert(this===h5course); } 这便是上面所说的,要将函数与函数名分开看待 4)绑定函数时的this 此时如果我们对3)的代码进行一些修改...我们可以将document.onclick理解为一个对象方法,如同例4的o.test2一样。...} 6)setTimeout等传参形式的this指向 不要去看传的参数函数的所有者,看执行函数的所有var obj = {}; obj.x = 1; obj.y = 2; window.x = 100

1.1K40

Javascript的bind详解

从上面的React代码,可以看出bind执行后是函数,并且每个函数都可以执行调用它。 眼见为实,耳听为虚。...5.如果函数没有返回对象类型Object(包含Functoin, Array, Date, RegExg, Error),那么new表达式的函数调用会自动返回这个新的对象。...Object.create() // 所以采用 MDN ployfill方案 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript...文章的例子和测试代码放在githubbind模拟实现 github。bind模拟实现 预览地址 F12看控制台输出,结合source面板查看效果更佳。...} 参考 OshotOkill翻译的 深入理解ES6 简体中文版 - 第三章 函数(虽然笔者是看的纸质书籍,但推荐下这本在线的书) MDN Function.prototype.bind 冴羽: JavaScript

1.6K32

JavaScriptisPrototypeOf函数详解

JavaScriptisPrototypeOf函数详解 有时看一些框架源码的时候,会碰到 isPrototypeOf() 这个函数,那么这个函数有什么作用呢?...这个函数理解的关键是在原型链上,这个据说是JavaScript的三座大山之一。 这里不详述其中的原理,简单的来讲就是3点: 1. 函数对象,都会天生自带一个prototype原型属性。 2....,用代码可能更好解释,请看下面推导: // 因为 Human 的原型(prototype)的原型(__proto__)指向 Object 的原型(prototype) Human.prototype....示例4,Object.prototype是否是内置类的原型: JavaScript内置类Number、String、Boolean、Function、Array因为都是继承Object,所以下面的输出也都是...Function的实例,所以输出true console.log(function(){} instanceof Function); 复制代码 instanceof 作用的原理就是判断实例的原型链能否找到类的原型对象

45640

JavaScript的包装类型详解

JavaScript的包装类型详解 • 在 JavaScript ,我们有基本类型和对象类型两种数据类型。...• 包装类型是 JavaScript 的一种特殊对象,它们将基本类型的值“包装”在对象,使我们能够在基本类型上调用方法。...} • 在这个例子,bool 是一个 Boolean 对象,其包装的值为 false。...在 JavaScript ,有两种类型的布尔值:基本类型的布尔值(true 或 false)和 Boolean 对象(通过 new Boolean() 创建的,它是一个包装对象,可以包装一个布尔值,但它本身是一个对象...在 JavaScript ,所有的对象(包括 Boolean 对象)在布尔上下文中都被视为 true,无论它们包装的值是 true 还是 false。 3. 这就是为什么 if 语句中的 !

6910

javascript的闭包closure详解

简介 闭包closure是javascript中一个非常强大的功能。所谓闭包就是函数的函数,内部函数可以访问外部函数的作用域范围,从而可以使用闭包来做一些比较强大的工作。...Closure闭包 函数的函数有了,那么什么是闭包呢?...我们在父function定义了privateCounter属性和changeBy方法,但是这些方法只能够在内部function访问。...我们创建了一个setupHelp函数,setupHelp,onfocus方法被赋予了一个闭包,所以闭包的item可以访问到外部function定义的item变量。...最简单的办法使用ES6引入的let描述符,从而将item定义为block的作用域范围,每次循环都会创建一个新的item,从而保持闭包的item的值不变。

57330

javascript的闭包closure详解

简介 闭包closure是javascript中一个非常强大的功能。所谓闭包就是函数的函数,内部函数可以访问外部函数的作用域范围,从而可以使用闭包来做一些比较强大的工作。...Closure闭包 函数的函数有了,那么什么是闭包呢?...我们在父function定义了privateCounter属性和changeBy方法,但是这些方法只能够在内部function访问。...我们创建了一个setupHelp函数,setupHelp,onfocus方法被赋予了一个闭包,所以闭包的item可以访问到外部function定义的item变量。...最简单的办法使用ES6引入的let描述符,从而将item定义为block的作用域范围,每次循环都会创建一个新的item,从而保持闭包的item的值不变。

73511

Javascript的url编码与解码(详解)

摘要 本文主要针对URI编解码的相关问题做了介绍,对url编码哪些字符需要编码、为什么需要编码做了详细的说明,并对比分析了Javascript中和编解码相关的几对函数escape / unescape...Javascript的escape,encodeURI和encodeURIComponent的区别 Javascript中提供了3对函数用来对Url编码以得到合法的Url,它们分别是escape /...()*-._~0-9a-zA-Z 兼容性不同 escape函数是从Javascript1.0的时候就存在了,其他两个函数是在Javascript1.5才引入的。...大部分应用程序均能处理这种非标准实现的Url编码,但是在客户端Javascript,并没有一个函数能够将+号解码成空格,只能自己写转换函数。...你可以在地址栏上使用Javascript访问location.href就可以看出来了。在研究Url编解码的时候千万别被这些假象给迷惑了。

2.3K90

详解JavaScript的变量提升函数提升

先抛出一个问题: 先有鸡还是先有蛋:直觉上会认为 JavaScript 代码在执行时是由上到下一行一行执行的。但实际上这并不完全正确,有一种特殊情况会导致这个假设是错误的。...但只有声明本身会被提升,而赋值或其他运行逻辑会留在原地 javascript并不是严格的自上而下执行的语言 变量声明提升: 1....变量提升详解 当你看到 var a = 2; 时,可能会认为这是一个声明。但 JavaScript 实际上会将其看成两个 声明:var a; 和 a = 2;。第一个定义声明是在编译阶段进行的。...var a = 200, 所以 var a会被提升到fn的作用域顶端,第一输出则为undefined 下面这段代码,由于es6之前,js是没有块级作用域的,所以 if 声明的a变量会被当成全局变量处理...a没有使用var定义,会造成zxx函数没有变量声明,所以zxx里面访问的变量a,其实都是访问的全局变量a,a = 20 又相当于给全局变量a重新赋值20 函数声明提升 通过function声明的函数,

1.4K30

详解 JavaScript 的模块、Import和Export

如果将 JavaScript 加载到页面,通常是以小片段的形式提供效果和交互,一般会把所有的 JavaScript 代码全都写在一个文件,并加载到一个 script 标签。...index.html 文件用来显示两个数字的和、差、乘积和商,并链接到 script 标签的两个 JavaScript 文件。打开 index.html 并添加以下代码: index.html 相同。 在 ES6 把原生模块添加到 JavaScript 语言之前,社区曾经尝试着提供了几种解决方案。...第一个解决方案是用原生 JavaScript 编写的,例如将所有代码都写在 objects 或立即调用的函数表达式(IIFE),并将它们放在全局命名空间中的单个对象上。...原生 JavaScript 模块 JavaScript 的模块使用import 和 export 关键字: import:用于读取从另一个模块导出的代码。 export:用于向其他模块提供代码。

1.8K20

第149天:javascriptthis的指向详解

js的this指向十分重要,了解jsthis指向是每一个学习js的人必学的知识点,今天没事,正好总结了jsthis的常见用法,喜欢的可以看看: 1、全局作用域或者普通函数this指向全局对象window...console.log(this)} 10 bar() //window 11 12 //自执行函数 13 (function () {console.log(this)})(); //window 2、方法调用谁调用...21 async:true, 22 success: function (res) { 23 console.log(this) // this指向传入$.ajxa()的对象...console.log(self) // window 25 } 26 }); 27 //这里说明以下,将代码简写为$.ajax(obj) ,this指向obj,在objthis...指向window,因为在在success方法,独享obj调用自己,所以this指向obj 3、在构造函数或者构造函数原型对象this指向构造函数的实例 1 //不使用new指向window 2

32420

JavaScript Property 和 Attribute 的区别详解

property是DOM的属性,是JavaScript里的对象; attribute是HTML标签上的特性,它的值只能够是字符串; 基于JavaScript分析property 和 attribute...这是由于,每一个DOM对象都会有它默认的基本属性,而在创建的时候,它只会创建这些基本属性,我们在TAG标签自定义的属性是不会直接放到DOM的。...DOM对象的attributes属性里面; 这些attribute属性的JavaScript的类型是Attr,而不仅仅是保存属性名和值这么简单; 那么,如果我们更改property和attribute...才会被保存在property的attributes属性; attribute会初始化property的同名属性,但自定义的attribute不会出现在property; attribute的值都是字符串...参考资料 原文地址 JavaScript Property 和 Attribute 的区别详解 其他 html标签属性(attribute)和dom元素的属性(property)  (只是由于感觉布局有点乱

3.6K20
领券