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

yizhihongxing

下面我将为你详细讲解“几句话带你理解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日

相关文章

  • WEB开发之注册页面验证码倒计时代码的实现

    WEB开发之注册页面验证码倒计时代码的实现可以通过以下步骤完成。 1. HTML结构 首先,我们需要在HTML中添加一个用于显示倒计时的标签,并为获取验证码的按钮添加一个点击事件,并在点击事件中调用计时器函数。 示例代码: <div> <label for="phone">手机号码:</label> &…

    JavaScript 2023年6月10日
    00
  • JS实现数组的增删改查操作示例

    下面我来为您讲解一下JS实现数组的增删改查操作的完整攻略。 1. 增加操作 对于增加数组元素的操作,可以使用push()方法或者splice()方法。 push()方法 push()方法可以向数组末尾追加一个或多个元素,示例代码如下: let arr = [1, 2, 3]; arr.push(4); console.log(arr); // [1, 2, …

    JavaScript 2023年5月27日
    00
  • javascript之大字符串的连接的StringBuffer 类

    StringBuffer 类是一个在 JavaScript 中实现字符串连接的工具类,它可以支持大字符串的高效连接,同时减少了连接大字符串时产生的多余内存自动分配。 使用 StringBuffer 类的基本步骤 StringBuffer 类的基本使用步骤分以下三步: 创建一个 StringBuffer 对象进行实例化 使用 append 方法向 String…

    JavaScript 2023年5月28日
    00
  • JavaScript 判断iPhone X Series机型的方法

    下面是详细讲解”JavaScript 判断iPhone X Series机型的方法” 的完整攻略。 前言 首先,我们需要了解一下 iPhone X Series 机型的特点,它们比一般的 iPhone 机型拥有更高的设备屏幕分辨率,并且它们的设备宽高比(device aspect ratio)都是 1125:2436。 判断方法 为了判断一个设备是否为 iP…

    JavaScript 2023年6月11日
    00
  • 浅谈Javascript中的Label语句

    当开发者在JavaScript的开发中需要使用到跳出多重循环或者是跳出函数的操作时,使用break和continue关键字 这两个关键字的作用都是控制循环语句,break直接跳出循环,continue只是跳出本次循环,但是仅仅使用这两个关键字是满足不了开发者的需求,这个时候我们就需要了解 label 语句。 Label语句的含义 在 JavaScript 中…

    JavaScript 2023年5月28日
    00
  • Javascript Array length 方法

    以下是关于JavaScript Array length方法的完整攻略。 JavaScript Array length方法 JavaScript Array length方法用于获取或设置数组的长度。该方法返回数组中元素的数量,或者设置数组的长度。如果设置的长度小于当前数组的长度,则数组将被截断。如果设置的长度大于当前数组的长度,则数组将被扩展,并且新的元…

    JavaScript 2023年5月11日
    00
  • vue之el-form表单校验以及常用正则详解

    Vue之el-form表单校验以及常用正则详解 前言 在前后端分离的web开发中,前端负责数据的采集、交互等操作。在web表单中,数据的准确性、合法性都需要得到保障,因此加入表单校验机制,不仅可以规范数据的格式,降低后端的数据处理难度,也能增强用户的体验感。 Vue是一套渐进式的JavaScript框架,本文主要介绍Vue中的表单校验以及常用正则的运用。 e…

    JavaScript 2023年6月10日
    00
  • 如何在wxml中直接写js代码(wxs)

    下面是如何在wxml中直接写js代码(wxs)的攻略: 编写wxs文件 首先需要编写wxs文件,在wxs文件中可以编写js代码。在wxml中可以通过< wxs >标签引入wxs文件,引入后可以直接使用wxs中的变量或函数。 示例代码如下: // test.wxs module.exports.add = function (a, b) { ret…

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