JS中改变this指向的两种方法

this

this是javascript的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。
this一般指向的是当前被调用者,但也可以通过其它方式来改变它的指向,下面将介绍两种改变this指向的方式:

1.call()

call(thisObj[, arg1[, arg2[, …]]])
第一个参数就是要更改this指向的对象,为必选参数; 之后的参数要根据调用的函数是否需要传入参数(为可选的)
例:

    var name = 'hanmeimei';function fn() {console.log(this.name);//此时this指向的是window中的name,打印的是hanmeimei}fn();//hanmeimeivar obj = {name: "lilei",fn: function () {console.log(name);}}obj.fn();//此时还是指向的是window中的name 还是hanmeimeifn.call(obj);//将this的指向改为obj中的name 打印的是lilei

call()的传参
例:

var name = 'hanmeimei';function fn(x, y) {console.log(this.name, x, y);};var obj = {name: 'lilei',say: function () {console.log(name);}}say.call(obj, 'one', 'two');//打印lilei one two 使用call()将参数x,y改成了one two

2.apply()

apply(thisObj[,argArray])
和call()同样第一个参数就是要更改this指向的对象,为必选参数; 之后的参数要根据调用的函数是否需要传入参数(为可选的)。apply的作用和call一样,不同的是传参的形式。apply需要以数组的形式传递参数
例:
appl()的传参

var name = 'hanmeimei';function fn(x, y) {console.log(this.name, x, y);};var obj = {name: 'lilei',say: function () {console.log(name);}}say.apply(obj, ['one', 'two']);//打印lilei one two 使用appl()将参数x,y改成了one two

以上就是对于改变this指向的两种方法。

JS中改变this指向的两种方法相关推荐

  1. js 改变change方法_Linux 中改变主机名的 4 种方法 | Linux 中国

    今天,我们将向你展示使用不同的方法来修改主机名.你可以从中选取最适合你的方法.-- Magesh Maruthamuthu 昨天我们已经在我们的网站中写过如何在 Linux 中修改主机名的文章[1]. ...

  2. html+input改变图标,JS Input里添加小图标的两种方法

    我们在做网页的时候,经常需要在input里面添加小图标,那么这里就介绍比较常见的两种方法. 将小图标当做input的背景来插入,直接上代码吧: Box{ height: 50px; backgroun ...

  3. Java中的string定义的两种方法和区别

    java中的String定义的两种方法和区别 第一种:new方式 String s1 = new String("hello world"); String s2 = new St ...

  4. 多元统计分析matlab,MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法...

    MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法: 1.层次聚类hierarchical clustering 2.k-means聚类 这里用最简单的实例说明以下层次聚类原理和应用发 ...

  5. linux 7修改主机名重启后不生效_Linux 中改变主机名的 4 种方法 | Linux 中国

    今天,我们将向你展示使用不同的方法来修改主机名.你可以从中选取最适合你的方法.-- Magesh Maruthamuthu 昨天我们已经在我们的网站中写过如何在 Linux 中修改主机名的文章[1]. ...

  6. WPF中在XAML中实现数据类型转换的两种方法

    WPF中在XAML中实现数据类型转换的两种方法 原文:WPF中在XAML中实现数据类型转换的两种方法 熟悉数据绑定的朋友都知道,当我们在Model中获取一个对象的数据,常常需要对其进行数据转换后显示在 ...

  7. python怎么清屏_python实现清屏的方法 Python Shell中清屏一般有两种方法。

    Python Shell 怎样清屏? Python Shell中清屏一般有两种方法. 奈何一个人随着年龄增长,梦想便不复轻盈:他开始用双手掂量生活,更看重果实而非花朵.--叶芝<凯尔特的搏暮&g ...

  8. VB中FSO的调用的两种方法

    方法一:   Dim   objFso      Set   objFso   =   CreateObject("Scripting.FileSystemObject")    ...

  9. javaScript改变this指向的三种方法

    javaScript提供了一些函数方法帮助我们处理函数内部this的指向问题,常用的有bind().call().apply()三种方法 1.call() 方法调用一个对象.简单理解为调用函数的方式, ...

  10. Revit插件教学丨Revit中绘制斜楼板的两种方法?

    Revit插件教学丨Revit中绘制斜楼板的两种方法? 我们经常遇到一些斜楼板,很多朋友不知道如何画好楼板,经常在公众号留言说怎么画好楼板,怎么快速高效.但我相信很多玩Revit的玩家都很熟悉,今天和 ...

最新文章

  1. 小学计算机课知识点总结,小学计算机教学总结3篇
  2. 半轴CVJ(constant velocity joint)
  3. 并发场景下MySQL存在的问题及解决思路
  4. opencv14-自定义线性滤波
  5. 超经典实用APP UI产品界面设计模板
  6. [net]ftp ssh http telnet https服务及端口
  7. Oracle PL/SQL 存储过程
  8. c++并发编程之thread::join()和thread::detach()(转)
  9. 向对象中添加数据_在RMarkdown编译HTML文件中添加数据下载按钮
  10. 老web换新枝----Sails.js移动设备的全新生产力(一)
  11. [Simulink] 从S函数到模块代码生成
  12. 犀牛6.0grasshopper翻译插件_Rhino 6.0犀牛三维建模 软件下载安装包教程(附下载方法)...
  13. idea和搜狗输入法快捷键冲突_Win10 输入法简繁体快捷键与 IDEA 冲突
  14. 基于深度学习和自闭症脑成像数据库(ABIDE)识别自闭症谱系障碍
  15. cocos2d-x传智播客_Hanselminutes播客54-压缩持续集成
  16. 如何计算样本权重和类别权重? 样本权重怎样起作用?
  17. vue+pdf.js 印章签署完后鼠标滑过显示签章信息
  18. arcgis pro发布矢量切片服务及利用arcgis api for javascript进行调用
  19. 2020元旦献礼——从零开始开发一个操作系统
  20. 华为matebook d装双系统

热门文章

  1. 网页资源不知道如何下载,我来教你
  2. 1到10加法创新图片-走迷宫_“小火锅+关东煮”,呷哺呷哺又创新模式!客单提到110元!...
  3. win7文件服务器代码,win7搭建文件服务器
  4. php publish,Laravel执行php artisan vendor:publish卡住问题解决方法
  5. 2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!(转载)
  6. 001案例分析、常见项目管理名词
  7. iphone编程资源站
  8. 【转】​“八段锦”养生:通经络,补气血,简单8个动作调理全身脏腑!
  9. C++ Boost库分类总结
  10. Windows安装mysql8并设置开机自启动