首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

这不返回对象属性(箭头,this)

这不返回对象属性(箭头,this)是一个关于JavaScript编程语言中的箭头函数和this关键字的问题。在JavaScript中,箭头函数是一种简洁的函数语法,它可以更方便地定义匿名函数或回调函数。

箭头函数与普通函数的区别在于它没有自己的this值,它会继承外层作用域的this值。这意味着在箭头函数内部,无法通过this来访问到对象的属性。

举个例子,假设有一个对象person,其中有一个方法greet使用箭头函数定义:

代码语言:txt
复制
const person = {
  name: 'John',
  greet: () => {
    console.log(`Hello, my name is ${this.name}`);
  }
};

person.greet();

在上述代码中,箭头函数greet无法访问到person对象的name属性,因为箭头函数没有自己的this值,它会继承外层作用域的this值,而外层作用域是全局作用域,因此this指向的是全局对象(在浏览器环境中是window对象)。由于全局对象没有name属性,所以会输出undefined。

对于这个问题,可以使用普通函数来解决,普通函数会有自己的this值,可以正确访问到对象的属性:

代码语言:txt
复制
const person = {
  name: 'John',
  greet: function() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

person.greet();

在上述代码中,greet方法使用普通函数定义,this指向的是person对象,因此可以正确访问到name属性,输出结果为"Hello, my name is John"。

总结起来,箭头函数在某些情况下可以简化代码,但在需要使用this来访问对象属性的场景下,应该使用普通函数。

腾讯云相关产品和产品介绍链接地址:

  • 云函数(Serverless):https://cloud.tencent.com/product/scf
  • 云开发(CloudBase):https://cloud.tencent.com/product/tcb
  • 云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能(AI):https://cloud.tencent.com/product/ai
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • js对象属性

    这个要和new关键字有关了,其关键的四个步骤是创建新的对象,然后构造函数的作用域指向新对象(this指向新对象),执行构造函数中的代码,返回对象。所以自然通过this赋值的都是新对象属性了。...方法 内容 备注 for in 可枚举,自身以及继承属性 对象以及继承,可枚举,不含 Symbol 属性 Object.keys(obj) 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性键名...对象自身可枚举,不含 Symbol 属性 Object.getOwnPropertyNames(obj) 返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名 对象自身...,包括不可枚举属性 Object.getOwnPropertySymbols(obj) 返回一个数组,包含对象自身的所有 Symbol 属性的键名 对象自身,symbol Reflect.ownKeys...对象自身,全部属性 属性中的this是什么 来源 指向 对象 对象自身 构造函数 返回对象 原型 原型 纯函数调用 外部环境全局,浏览器或者node 访问器get,set使用 一般我们也用不到这个

    15.6K10

    mybatis返回对象_存储过程不能返回结果

    论MyBatis返回结果集_返回实体类还是Map 在更多的了解mybatis后发现不单单通过实体类可以直接返回数据,还可以直接返回一个Map结果集(resultType=”java.util.Map...”) ,如果是多条数据则返回一个List>结果集。...很多人会觉得发现,直接返回一个Map的话太方便了,什么映射什么的全都不用管,只用在sql书写的之后 as好别名就可以了。...1.可读性,当你前端用Map接收传递参数和mybatis返回用map接收和传递参数,当你过些时需要行进代码review的时候你会发现你需要先去看jsp里的参数名和sql返回的别名。...2.MyBatis也是O/R框架的一员,从业界准则来看,不符合面向对象思想。 一个代码规范问题。 然后关于效率问题目前还没有参考到。

    1.7K10

    VBA对象属性概述

    上节概述了对象模型的基础知识,而对象的学习重点其实就是它们的属性和方法,不同对象都有诸多不同的属性和方法,后期将从常用对象属性和方法循序渐进的展开。...本节将通过三个递进的示例,来介绍对象属性的通用知识点。 属 性 表 示 方 法 对象属性决定了对象的特征或者某一方面的行为。 对象属性的表示方法是用英文逗号间隔:对象.属性。...要确定最终值,就可以用到集合的count属性,count属性就是用来统计集合中对象的数量。(前面提到过集合也是一种特殊对象,作为对象也有属性。)...效果如下: ---- 知 识 点 1、对象属性的表示方法:对象.属性 2、对象可以是其他对象属性。前面介绍对象概述时已经介绍过,比如字体是单元格对象属性,但字体本身也是对象。...同样单元格range对象其实也是worksheet的属性。 3、集合是特殊对象,也有属性。 上面实例中以workshees集合的count属性举例。是用来统计普通工作表worksheet对象的数量。

    1.5K10

    JavaScript——对象属性

    在JavaScript中,所有的对象都是一组属性的集合,属性可以是数值,字符串等原始类型,也可以是函数,或者是其他对象属性的类型 JavaScript中的属性有两种类型:数据属性和访问器属性。...属性的继承 属性可以通过对象的原型链进行继承。...禁止扩展对象 通过Object.preventExtensions()方法可以禁止将对象进行扩展,禁止扩展后的对象无法: 添加新的属性 但可以: 删除已有的属性 改变已有属性的特性 修改已有数据属性的值...(如果该属性可写) 修改已有访问器属性的值(如果有set方法) 密封对象 通过Object.seal方法可以将对象进行密封,密封后的对象无法: 添加新的属性 删除已有的属性 改变已有属性的特性 但可以...修改已有数据属性的值(如果该属性可写) 修改已有访问器属性的值(如果有set方法) 冻结对象 通过Object.freeze方法可以将对象进行冻结,冻结后的对象无法: 添加新的属性 删除已有的属性 改变已有属性的特性

    2.4K30

    JavaScript之面向对象的概念,对象属性对象属性的特性简介

    像上面代码中直接在对象上定义的属性,他们的这个特性默认值为true. (2)[[Enumerable]]:表示能否通过for-in循环返回属性。...可以通过for-in循环返回属性,可以修改属性的值。...,且类似与面向对象里面的类属性,他们都包含一对getter和setter函数,在读取访问器属性时,会调用getter函数,这个函数会返回有效的值,在写入访问器属性时,会调用setter函数并写入新值,这个函数负责决定如何处理数据...这个特性的默认值为true; [[Enumerable]]:表示能否通过for-in循环返回属性。...getter函数返回_year值.这里不一定要同时指定getter和setter。只指定getter意味着属性是不能写,只指定setter意味着只写,无法获取属性值。

    2.3K60

    TypeScript自定义类型之对象属性必选、对象属性可选

    前沿TS中实现对象属性必选、对象属性在开发过程中十分常见,前端在传参数时,有些参数比必传,有些是选传,我们可以定一个多个对象来实现传参,但是这让代码变得冗余。我们可以通过TS定义数据类型来实现。...: string | undefined}2.2 Pick>上面得到了可选属性对象类型,怎么把除了可选属性的其他属性对象类型与可选属性对象类型合并呢,我们最终结果是要一个包括...info对象中所有属性对象类型。...思路如下:首先需要把可选属性去除,得到一个不包括可选属性对象类型将剩余属性组成的对象类型与可选属性组成的对象类型交叉,得到最终结果使用TS中的Exclude工具类型,从联合类型中去除指定属性,最终得到联合类型...实现思路具体如下:去除可选属性得到新的对象类型(必填属性对象)抽取出除去必填的属性生成新的代谢(可选属性对象)交叉合并RequiredByKeys = {[P

    99520
    领券