JS中this的指向性问题
一、this用于访问当前方法所属的对象,谁调用的方法,方法就属于谁
// 普通函数
let obj = {
a : 12,
fn() {
console.log(this == obj); // true
}
}
document.onclick = function () {
console.log(this); // document
};
obj.fn();
二、函数的this跟定义无关,跟调用有关
function show() {
console.log(this);
}
1. 直接调用 -> window || undefined
show();
2. 挂在对象上,然后执行方法
let array = [1, 2, 3];
array.fn = show;
array.fn(); // [1,2,3,fn]
3. window
setTimeout(show, 100);
4.构造函数 -> 当前构造的实例
new show(); //show{}
5. 工具函数
show.call(12); // 12
6. forEach里面的回调函数的this
let arr1 = [1, 2, 3];
// reason
arr1.forEach = function (cb) {
for (let i = 0; i < this.length; i++) {
cb(this[i]); // 这里的回调函数是无指向的,因此下面的this指向不稳定
}
};
arr1.forEach(item => {
console.log(this); // window || undefined
})
7. 解决forEach回调函数的this的指向问题
let arr2 = [1, 2, 3];
// reason
arr2.forEach = function (cb,thisArg) {
for (let i = 0; i < this.length; i++) {
cb.call(thisArg,this[i]); // 这里的回调函数是无指向的,因此下面的this指向不稳定
}
};
arr2.forEach(item => {
console.log(this); // window || undefined
},document)
8. 箭头函数中的this
// 箭头函数中的this指向被定义时的对象,与调用者无关
var jtFun = () => {
console.log(this);
}
let jt = {
fnc: jtFun
}
jt.fnc(); // window
JS中this的指向性问题的更多相关文章
- 5.0 JS中引用类型介绍
其实,在前面的"js的六大数据类型"文章中稍微说了一下引用类型.前面我们说到js中有六大数据类型(五种基本数据类型 + 一种引用类型).下面的章节中,我们将详细讲解引用类型. 1. ...
- 【repost】JS中的异常处理方法分享
我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要 ...
- JS中给正则表达式加变量
前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下. 一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...
- js中几种实用的跨域方法原理详解(转)
今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...
- 关于js中的this
关于js中的this this是javascript中一个很特别的关键字,也是一种很复杂的机制,学习this的第一步就是要明白this既不指向函数自身也不指向函数的词法作用域,this实际上是函数被调 ...
- 表值函数与JS中split()的联系
在公司用云平台做开发就是麻烦 ,做了很多功能或者有些收获,都没办法写博客,结果回家了自己要把大脑里面记住的写出来. split()这个函数我们并不陌生,但是当前台有许多字段然后随意勾选后的这些参数传递 ...
- JS中 call() 与apply 方法
1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...
- 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...
- 分析js中的constructor 和prototype
在javascript的使用过程中,constructor 和prototype这两个概念是相当重要的,深入的理解这两个概念对理解js的一些核心概念非常的重要. 我们在定义函数的时候,函数定义的时候函 ...
随机推荐
- 提升GAN的技术 Tips for Improving GAN
Wasserstein GAN (WGAN) 在一些情况下,用 JS散度来衡量两个分布的远近并不适合: 1. 数据是高维空间中的低维流形(manifold),两个分布在高维空间中的 overlap 少 ...
- C++赋值兼容原则理解
–赋值兼容原则(派生类对象是基类对象,反之不成立)–基类指针强制转换成派生类指针–派生类中重定义基类成员(同名覆盖) 假设, 一个基类 "普通人", 一个派生类 "超人& ...
- Git多人项目开发流程演练
1. 前言 本文利用 GitHub 平台进行一个多人项目开发流程的演练,以加深课上所学内容. 参考文献:五⼤场景玩转 Git,只要这一篇就够了! 2. 初始化项目 2.1 新建远程项目 一个多人项目通 ...
- Java date format 时间格式化
import java.util.Date; import java.text.DateFormat; /** * 格式化时间类 * DateFormat.FULL = 0 * DateForma ...
- Dell XPS 7590 Hackintosh
网上主流引导Hackintosh的工具有Chameleon, Clover和OpenCore. 但是随着Hackintosh重要驱动开发团队acidanthera逐渐转向OpenCore,后者显然才是 ...
- 怎么写一个Activity
a.新建一个类继承Actitvity b.重写oncreate方法 setContentView(R.layout.XXX);//设置布局文件 c.注册activity <activity an ...
- 一、Mysql(1)
数据库简介 人类在进化的过程中,创造了数字.文字.符号等来进行数据的记录,但是承受着认知能力和创造能力的提升,数据量越来越大,对于数据的记录和准确查找,成为了一个重大难题 计算机诞生后,数据开始在计算 ...
- 笔记本键盘按U键却变成了4
解答 笔记本键盘U盘变成了4,是因为你开启了小键盘功能.出现该问题,只要关闭小键盘功能即可,操作如下: 按住键盘下方的Fn,同时按住键盘顶部的F键中标有Numlk的键. 电脑屏幕出现解锁标志,小键盘功 ...
- 多测师讲解接口测试 _报错_高级讲师肖sir
- 女儿拿着小天才电话手表问我App启动流程
前言 首先,new一个女儿, var mDdaughter = new 女儿("6岁","漂亮可爱","健康乖巧","最喜欢玩小天 ...