【JS】JavaScript中的this关键字

这篇具有很好参考价值的文章主要介绍了【JS】JavaScript中的this关键字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

this是什么?

this的指向

①全局环境

②构造函数

③对象的方法

this的四类调用方式

①作为对象方法调用

②纯粹的函数调用

③作为构造函数调用

④使用apply、call、bind调用

举例说明


this是什么?

JavaScript this 关键词指的是它所属的对象。

它拥有不同的值,具体取决于它的使用位置:

  • 在方法中,this 指的是所有者对象。
  • 单独的情况下,this 指的是全局对象。
  • 在函数中,this 指的是全局对象。
  • 在函数中,严格模式下,this 是 undefined。
  • 在事件中,this 指的是接收事件的元素。

像 call() 和 apply() 这样的方法可以将 this 引用到任何对象

this的指向

JS中,一切皆对象,运行环境也是对象,函数在哪个对象中运行,this就指向这个对象

①全局环境

在全局下使用,this指向顶层对象window

function f(){
console.log(this === window);
}
f() //true

②构造函数

构造函数中的this指向实例对象

var obj = funtion(p){
this.p = p;
};
这里定义了一个构造函数obj,在构造函数内部定义this.p就相当于实例对象有一个p属性
var o = new obj('hello world');
o.p  //"hello world"

③对象的方法

如果对象的方法里面包含this,this的指向就是方法运行时所在的对象,这个方法赋值给另一个对象,就会改变this的指向

var obj = {
    foo: function(){
        console.log(this);
    }
};
obj.foo()

通过用法来改变this的指向

(obj.foo = obj.foo)()  //重新赋值,但是在window下运行的

(false || obj.foo)()  //fasle运行不了,运行后边这个,也是在window下运行的

(1,obj.foo)()  //类似

可以理解为obj.foo是个值,上面三种在调用的时候已经变了调用环境了文章来源地址https://www.toymoban.com/news/detail-619663.html

this的四类调用方式

①作为对象方法调用

function f() {
console.log( this.code );
}
let obj = {
    code: 200,
    f: f
};
obj.f(); // 200

②纯粹的函数调用

function f() {
    console.log( this.code );
}
var code = 200;  //注意,这里要用var,let是块作用域,下面会输出undefined
f(); // 200

③作为构造函数调用

code = 404
function A() {
this.code = 200
this.callA = function() {
console.log(this.code)
}
}

var a = new A()
a.callA() // 200, callA在new A返回的对象里

④使用apply、call、bind调用

var code = 404;
let obj = {
code: 200,
    f: function() {
            console.log(this.code);
    }
}

obj.f(); // 200, 实际上是作为对象的方法调用
obj.f.apply(); // 404,参数为空时,默认使用全局对象global,在此处为对象window
obj.f.apply(obj); //200,this指向参数中设置的对象

举例说明

var f = functin() {
console.log(this.x)
}
var x = 1;
var obj = {
    f:f,
    x:2,
};
f()  //单独执行,最终结果是1
obj.f()  //obj下执行,最终结果是2
第一次f在全局环境执行,第二次在obj环境执行,this执行不同
function doF(fn) {
    this.code = 404;
    fn();
}

function f() {
    console.log(this.code);
}

let obj = {
    code: 200,
    f: f
};

var code = 500;
doF(obj.f); // 404
看这,obj.f作为参数传入dof函数中,所以最终还是dof对象调用的所以会输出404
var a = {
    p:'hello',
    b: {
        m:function(){
        console.console.log(this.p);
        }
    }
};

a.b.m();
//这里是多层调用,最终会显示undefined,因为这this指向的是a.b但是b里面没有p所以找不到
//与想法的找到a里面的p不同,👇是弥补方案


var a = {
    f1:function(){
        console.log(this);
        var that = this;
        var f2 = function(){
            console.log(that);
        }();
    }
}
a.f1()
通过把this赋值给that让这个函数锁定指向,从而找到正确的值
严格模式
var counter = {
    count:0
};
counter.inc = function(){
    'use strict'
    this.count++
};
var f = counter.inc
f()

到了这里,关于【JS】JavaScript中的this关键字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js中this关键字的作用和如何改变其上下文

    一、this 的作用 JavaScript 中的 this 引用了所在函数正在被调用时的对象。在不同的上下文中, this 的指向会发生变化。 在全局上下文中, this 指向全局对象(在浏览器中是 window 对象,在 Node.js 中是 global 对象)。 在函数中, this 指向调用该函数的对象。如果该

    2024年02月07日
    浏览(39)
  • 前端面试题-js-new关键字-this指向-js事件流-防抖节流

    1.创建一个简单的空对象 2.原型的绑定,确定对象O的原型链 3.绑定this对象为O,传入参数;执行Person构造函数,进行属性和方法的赋值操作 4.返回结果 普通函数的this指向 函数的this指向有一个基本的原则,谁调用的函数,函数的this就指向谁,否则指向全局 箭头函数的this指向

    2024年01月25日
    浏览(48)
  • 全面理解java中的构造方法以及this关键字的用法(超详细)

    Hello,各位铁汁们!我是小🐟儿哈!今天我又来更新我的Java基础学习博客了。 本篇主要内容概述: 1、🍚如何用构造方法初始化对象 2、🍚为啥要有this这个 3、🍚this.属性名访问成员变量、成员方法 4、🍚this.方法名 || this.()的用法 目录 初识构造方法  构造方法的使

    2023年04月09日
    浏览(62)
  • 【JavaSE专栏57】深度解析Java中的this和super关键字:用途、差异和实际应用

    博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 《MYSQL从入门到精通》数据库是开发者必会基础之一~ 🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄

    2024年02月07日
    浏览(45)
  • 【JavaScript】函数 ④ ( 函数返回值 | 函数返回值语法 return 关键字 | 函数默认返回值 undefined )

    JavaScript 函数 可以 实现某种特定的功能 , 执行完毕后 , 可以返回一个 \\\" 返回值 \\\" ; 当 函数 被调用执行任务完毕时 , \\\" 返回值 \\\" 会被返回给调用者 ; 如果 函数 中没有明确 使用 return 返回 \\\" 返回值 \\\" , 那么函数会默认返回undefined 值 ; 在 JavaScript 中 , 函数 返回值是 通过

    2024年04月10日
    浏览(56)
  • C# this关键字的作用

    在C#中, this 有以下几种主要作用: 引用当前对象: this  用于引用当前类的实例。可以通过  this  来访问当前对象的成员变量、方法和属性。 区分字段与局部变量:当成员变量和局部变量同名时,可以使用  this  来区分。 在构造函数中调用其他构造函

    2024年02月22日
    浏览(50)
  • class_10:this关键字

    this是指向调用对象的指针    链式调用   在这个例子中,Car类的构造函数使用this指针来区分成员变量好人构造函数参数。同意,setYear成员函数使用this指针来返回该函数的对象的引用,这允许链式调用,如

    2024年01月20日
    浏览(38)
  • Java编程练习之this关键字

    当类中的成员变量与成员方法中的参数重名时,会导致方法无法直接使用成员变量。 示例:创建demo类,定义一个成员变量name并赋初值,再定义一个成员方法showName(String name),输出方法中name的值。代码如下: package zhtestdemo; public class demo {  //创建类,类名叫demo /**/     Str

    2024年01月22日
    浏览(59)
  • Java 对象创建流程、this 关键字

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包