几句话带你理解JS中的this、闭包、原型链

下面我将为你详细讲解“几句话带你理解JS中的this、闭包、原型链”的完整攻略。

this

在Javascript中,this关键字代表函数执行时的上下文环境,它的值取决于函数被调用时的方式。如果函数是作为对象的方法被调用,this指向该对象,如果函数作为普通函数被调用,this指向全局对象window。

在ES6中,箭头函数使用词法作用域,且绑定了外层函数的this值,所以箭头函数的this值和外层函数的this值一样。

下面给出一个示例代码:

const obj = {
  name: "John",
  sayName: function() {
    console.log(this.name);
  }
}

const func = obj.sayName;
func(); //输出undefined

在这个例子中,sayName()函数中的this指向obj对象。但是在func函数中,this指向全局对象,因为func函数是通过函数表达式被赋值的。因此在执行func()的时候会输出undefined。

闭包

闭包是指有权访问另一个函数作用域中的变量的函数。闭包创建后,闭包内部引用外部作用域变量的过程即为闭包。

下面给出一个示例代码:

function getCounter() {
  let count = 0;
  return function() {
    count++;
    console.log(count);
  }
}

const counter = getCounter();
counter(); //输出1
counter(); //输出2

在这个例子中,getCounter()函数返回的是一个闭包函数,这个闭包函数内部引用了外部作用域中的变量count。每次调用闭包函数的时候,都会访问外部作用域的count变量并执行count++操作。因此在调用counter()函数时会输出1、2、3...依次递增的数字。

原型链

Javascript中的每个对象都有原型(prototype),原型是一个对象,它的属性和方法可以被对象所继承。如果一个对象无法在自身找到所需的属性或方法,它会从自己的原型中查找,如果还是找不到则会沿着原型链一直向上找。

下面给出一个示例代码:

function Person(name) {
  this.name = name;
}

Person.prototype.sayName = function() {
  console.log(this.name);
}

const john = new Person("John");
john.sayName(); //输出John

在这个例子中,Person函数使用了构造函数的方式去创建一个对象john。该对象的原型为Person.prototype。在Person.prototype上定义了sayName()方法,因此john对象可以通过原型链继承到该方法并调用。在执行john.sayName()方法时会输出John。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:几句话带你理解JS中的this、闭包、原型链 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 关于js对textarea换行符的处理方法浅析

    我将详细讲解一下“关于JS对textarea换行符的处理方法浅析”的完整攻略。 标题 问题背景 在文本编辑区域输入内容时,用户通常使用回车键(Enter键)来换行。但是,在传输数据的过程中,回车键会被转换成一些特殊字符,如\r\n或\n等,在不同的操作系统和浏览器中,其对应的特殊字符可能也不同。那么,在使用JS对textarea的输入内容进行处理时,我们需要…

    JavaScript 2023年6月11日
    00
  • Javascript的并行运算实现代码

    实现Javascript的并行运算可以使用Web Worker来创建一个新的后台线程,将运算任务放到其中执行。以下是实现并行运算的完整攻略: 1. 创建一个新的Worker线程 var worker = new Worker(‘worker.js’); 其中’worker.js’是一个独立的后台JavaScript文件,在其中编写实际的并行运算代码。 2. …

    JavaScript 2023年5月27日
    00
  • Javascript中获取对象的原型对象的方法小结

    获取对象的原型对象是JavaScript中常见的操作,下面介绍一些获取对象的原型对象的方法。 方法一:使用Object.getPrototypeOf Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)。 示例代码: const obj = {}; const proto = Object.getP…

    JavaScript 2023年5月27日
    00
  • web游览器的标签页仿 ios mac 苹果的墓碑机制 (js代码)

    背景: 本来项目开发系统防挂机功能,在其余游览器中均可以使用。但是呢在苹果的safair游览器中会出现几率失效,最后经过排查发现是苹果的墓碑机制导致。即:此标签页活跃,其他标签页假死。然后就导致防挂机失效了。 原理: 假如当前游览器中有3个标签页分别是A,B,C,每个标签页都有倒计时。正常情况下,每个标签页都会倒计时。但是苹果游览器只会有一个标签页A正常倒计…

    JavaScript 2023年5月11日
    00
  • 记录-JS简单实现购物车图片局部放大预览效果

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一、实现效果 二、代码实现 代码不多,先看一下 HTML 里面结构很简单,初始化 MagnifyingGlass 对象来关联一个 IMG 标签来实现放大。 <!DOCTYPE html> <html> <head> <meta charset=”utf-8…

    JavaScript 2023年4月22日
    00
  • Javascript数组Array方法解读

    接下来我将为您详细讲解 “Javascript数组Array方法解读” 的完整攻略。 1. 概述 在 Javascript 中,数组(Array)是一个非常常用的数据结构,可以用来存储一系列的值。同时,数组提供了丰富的方法,可以对数组进行各种操作,例如添加、删除、筛选、排序等。 在本文中,我将为您详细解读 Javascript 数组的常用方法,帮助您更好地掌…

    JavaScript 2023年5月27日
    00
  • JavaScript时间戳与时间日期间相互转换

    下面我将详细讲解“JavaScript 时间戳与时间日期间相互转换”的完整攻略。 什么是时间戳? 时间戳是用于表示时间的一种方式,它是自1970年1月1日 00:00:00 UTC到当前时间的毫秒数。JavaScript只支持精确到毫秒级别的时间戳。 时间戳的好处是可以通过它来进行时间比较或计算时间差等操作,并且可以通过时间戳在不同的设备和系统之间进行时间的…

    JavaScript 2023年5月27日
    00
  • 正则表达式中test、exec、match的区别介绍及括号的用法

    正则表达式是用于匹配文本的强大工具,它允许您使用模式来搜索、替换和操作文本。在使用正则表达式时,test、exec、match及括号都是常用的概念,它们的用法与意义都不同。 test、exec、match的区别介绍 test方法 test方法是RegExp对象的方法之一,它的作用是测试一个字符串是否匹配某个正则表达式,返回布尔值。如果匹配成功,test方法返…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部