首页 > 编程语言 >JavaScript改变this指向的三种方法

JavaScript改变this指向的三种方法

时间:2023-12-30 21:33:39浏览次数:37  
标签:firstName 指向 lastName JavaScript person person1 三种 var call

JavaScript call() 方法

它可以用来调用所有者对象作为参数的方法。通过 call(),您能够使用属于另一个对象的方法。
var person = {
    fullName: function() {
        return this.firstName + " " + this.lastName;
    }
}
var person1 = {
    firstName:"Bill",
    lastName: "Gates",
}
var person2 = {
    firstName:"Steve",
    lastName: "Jobs",
}
person.fullName.call(person1);  // 将返回 "Bill Gates"

 上面的例子中,它为什么最后的输出是"Bill Gates"呢?因为call()方法改变了this的指向,把原本this指向为person变成指向为person1了

同时,call()方法可以接受参数:

var person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + "," + city + "," + country;
  }
}
var person1 = {
  firstName:"Bill",
  lastName: "Gates"
}
person.fullName.call(person1, "Seattle", "USA");//Bill Gates,Seatle,USA

 

JavaScript apply() 方法

apply() 方法与 call() 方法非常相似

var person = {
    fullName: function() {
        return this.firstName + " " + this.lastName;
    }
}
var person1 = {
    firstName: "Bill",
    lastName: "Gates",
}
person.fullName.apply(person1);  // 将返回 "Bill Gates"

 

call() 和 apply() 之间的区别

1.call() 方法分别接受参数

2.apply() 方法接受数组形式的参数。

apply() 方法接受数组中的参数:

 
var person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + "," + city + "," + country;
  }
}
var person1 = {
  firstName:"Bill",
  lastName: "Gates"
}
person.fullName.apply(person1, ["Oslo", "Norway"]);

bind()方法

bind() 方法创建一个新函数,当调用该新函数时,它会调用原始函数并将其 this 关键字设置为给定的值,同时,还可以传入一系列指定的参数,这些参数会插入到调用新函数时传入的参数的前面。

const module = {
  x: 42,
  getX: function () {
    return this.x;
  },
};

const unboundGetX = module.getX;
console.log(unboundGetX()); // The function gets invoked at the global scope
// Expected output: undefined

const boundGetX = unboundGetX.bind(module);
console.log(boundGetX());
// Expected output: 42

 

标签:firstName,指向,lastName,JavaScript,person,person1,三种,var,call
From: https://www.cnblogs.com/dutianyu/p/17936806

相关文章

  • JavaScript的apply、call、bind方法
    JavaScript的apply、call、bind方法概述简述这三个方法存在一定的迷惑性,而且对于刚看ES6的人来说,十分难理解,这里为了以后我可能会复习到这个知识点,做出详解。总的来说,这三个方法都是将某某某(某01)绑定在某某某(某02)上,然后执行这个被绑定的某某某(某01),或者单纯就是绑定不执行。详......
  • ECharts 是一个使用 JavaScript 实现的开源可视化库¹²³⁴。它可以流畅地运行在 PC
    ECharts是一个使用JavaScript实现的开源可视化库¹²³⁴。它可以流畅地运行在PC和移动设备上,兼容当前绝大部分浏览器(如IE8/9/10/11,Chrome,Firefox,Safari等)²³⁴。ECharts底层依赖轻量级的Canvas类库ZRender¹²³,提供直观,生动,可交互,可高度个性化定制的数据可视化图表¹......
  • js中三种URI编码方式比较
    一、实例比较数据传递常需要编码后传递,接收还需反编译,定义url:varurl="https://www.cnblogs.com/?username='小森森'&password='666666'";escape与unescapeconsole.log(escape(url));//编码console.log(unescape(escape(url)));//解码结果:https%3A//www.cnblog......
  • 实现线程的三种方式
    一、继承Thread类Thread类中创建线程最重要的两个方法为:publicvoidstart();publicvoidrun();采用Thread类创建线程,用户只需要继承Thread,覆盖Thread中的run方法,父类Thread中的run方法没有抛出异常,那么子类也不能抛出异常,最后采用start启动线程即可。【示例......
  • JavaScript | Variable、Function、Module、Class (一)
    函数函数声明functionsayHello(){return"HelloJavaScript!!"}函数表达式letsayHello=function(){return"HelloJavaScript!!"}函数、变量提升:函数和变量都会被提升,且函数会被优先提升;提升的意思是只要有声明定义,那么先调用都可以。因为JS会把定义放到......
  • HTML学习第七天:JavaScript进阶与事件处理
    在今天的HTML学习中,我进一步深入了JavaScript的学习,特别是事件处理方面。早上,我回顾了昨天学习的JavaScript基础知识,并进行了一些练习,以加深自己的理解。然后,我开始学习事件处理。事件处理是JavaScript中非常重要的一部分,它允许我们响应用户的各种操作,如点击、滑动、键盘输入等。我......
  • ASP.NET Core 内置异常中间件的三种方法
    方法一app.UseExceptionHandler(configure=>{configure.Run(asynccontext=>{varexcHandler=context.Features.Get<IExceptionHandlerPathFeature>();varex=excHandler.Error;if(ex!=null){conte......
  • HTML学习第六天:初步探索JavaScript与交互
    在今天的HTML学习中,我初步探索了JavaScript和网页交互的世界。早上,我首先了解了JavaScript的基本概念和语法。JavaScript是一种用于增强网页交互性的脚本语言,它可以直接在浏览器中运行。我学习了如何使用变量、函数和基本的控制结构来编写JavaScript代码。午后,我开始将JavaScript与......
  • Javascript 原型链 jQuery原型链 js原型链 我感觉我能一直写下去 扶着我>_<
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>原型链闭环</title><scriptsrc="./jquery.js"></script></head><body><divclass=&quo......
  • js的this指向
    在JavaScript中,this是一个特殊的变量,它引用了调用对象。它的指向在不同的上下文中有不同的变化。以下是一些常见的this指向的情况:1.全局上下文:在全局作用域中,this指向全局对象。在浏览器中,这通常是window对象。console.log(this);//window(在浏览器中)2.函数调用:当......