首页 > 其他分享 >js中class的构造函数的this指向问题

js中class的构造函数的this指向问题

时间:2023-05-08 10:57:10浏览次数:39  
标签:p1 name setName js person class 构造函数

场景

  • 定义了一个类的构造函数需要的参数是一个对象,而该对象的属性对class实例的属性进行了调用或修改,也就是在对象中使用了this

问题

  • 示例
    class Person {
      name: ''
      age: 0
      sex: 0
      setName: null
      constructor (person) {
        this.setName = person.setName
      }
    }
    const test = {
      setName: function (name) {
        this.name = name
      }
    }
    const p1 = new Person(test)
    p1.setName('小明')
    
  • 这时p1.setName('小明')就会报错,说setName里的this是undefined

解决

  • 这就需要在class的构造函数中改变参数的this指向,指向自己
    class Person {
      name: ''
      age: 0
      sex: 0
      setName: null
      constructor (person) {
        this.setName = person.setName.bind(this)
      }
    }
    

标签:p1,name,setName,js,person,class,构造函数
From: https://www.cnblogs.com/mizuki-vone/p/17381059.html

相关文章

  • 在JS中如何判断两个对象是否相等
    在JavaScript中,判断两个对象是否相等有多种方法,取决于你对相等的定义以及对象属性的类型。以下是几种常见的方法: 1.严格相等运算符(===)使用===运算符可以比较两个对象是否引用同一个对象。如果两个变量引用了同一个对象,则它们是相等的,否则它们是不相等的。例如:const......
  • Node.js躬行记(28)——Cypress自动化测试实践
    最近在研究如何提升项目质量,提炼了许多个用于自测的测试用例,但是每次修改后,都手工测试,成本太高,于是就想到了自动化测试。在一年前已将Cypress集成到管理后台的项目中,不过没有投入到实践中。今天在实践时发现,版本已经到了12.X,当时集成的版本是8.X。一、准备在......
  • js注册全选事件、单选全部后“全选”勾选事件
    //注册全选事件$("#selectAll").click(function(){varisAllCheck=$("#selectAll").prop("checked");varitems=document.getElementsByName("ck......
  • js基础---set、math、date等类
    set类概念,需要new功能为创建一个集合,与数组类似,区别就是它不能设置重复的值math是一个工具类,不需要new,可直接使用它的方法。他的常用方法如下:date类,需要newgetTime():返回一个时间戳,单位为毫秒。......
  • 巧用Chrome格式化压缩后的js文件
    对于格式化的js文件,可以用chrome处理。打开chrome浏览器,按F12进入开发者工具界面,找到一个压缩js文件,如图: 在浏览器的底部(左边)的工具栏有一个"{}"样的图标 ,点击一下就可以了。 格式后: 格式化的js也可以左击保存:......
  • Json数据的序列化与反序列化的三种常用方法介绍
    以下内容是本作者从官网中看相应的教程后所做的demo,其体现了作者对相关知识点的个人理解。。作者才疏学浅,难免会有理解不到位的地方。。还请各位读者批判性对待。。。    本文主要介绍在Json数据的序列化与反序列化的过程中我经常用到的三种工具的基本使用方法,及其他们之间......
  • Vue.js:Vue-Router动态路由从服务器接口获取路由数据
    (目录)文档https://v3.router.vuejs.org/zh/installation.html版本号"vue":"2.6.10","vue-router":"3.6.5",有几种方式实现动态路由:前端配置完整路由,通过接口返回的数据判断是否可显示,是否可访问前端配置部分路由,由后端接口返回的数据生成新路由抛开路由的思维,是否......
  • JS逆向 -- 某平台登录算法分析(RSA加密)
    一、输入账号密码,进行抓包二、F12打开开发者工具,抓包分析,password被加密了三、全局搜索password关键字,挨个分析,在箭头标记处找到了关键代码四、局部搜索,定位加密的关键点,通过JSEncrypt,setPublicKey等关键字分析是RSA加密五、代码编写1、调用RSA加密的基本代码编写functionaiyou(pw......
  • js基础---对象的序列化(JSON)与map
    序列化概念json工具类就是那个转换字符串的方法调用json静态方法,不需要new。注意事项将对象转换为json后再转换为对象,相当于做了一次深复制。当对象的字符串key属性满足不了需求时,可用map的对象属性作为keymap属性和方法map与数组之间的转换......
  • 使用 @ResponseBody 注解直接返回json字符串结果中文出现乱码
    在类上直接使用@RestController,这样子,里面所有的方法都只会返回json字符串了,不用再每一个都添加@ResponseBody!我们在前后端分离开发中,一般都使用@RestController,十分便捷!@RestControllerpublicclassUserController{//produces:指定响应体返回类型和编码@Request......