微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将属性作为对象中的函数

如何解决将属性作为对象中的函数

我有一个对象数组,所有对象都具有相同的属性,但其中一个属性应该是一个函数,它决定对象是否“可见”

类似于:

let ObjArr = [{
  name: 'Charles',age: 30,visible: (aName,anAge) => {
    return (((this.name === aName) && (this.age === anAge)) ? true : false)
  }
}]

console.log(ObjArr[0].visible('Charles',30)) // It should be true
console.log(ObjArr[0].visible('Peter',30)) // It should be false
console.log(ObjArr[0].visible('Charles',25)) // It should be false too

目前,他们都说假,但第一个应该是真的

提前致谢

拉斐尔

解决方法

对于粗箭头函数(即 =>),this 引用是“词法”引用。这意味着 this 引用指向定义 this 时的任何 objArr。不管那个对象是什么,它可能没有 nameage 属性,这意味着 this.nameundefinedthis.age 也是,所以您的比较都产生 false

要使函数从它被称为“from”(或“on”)的任何对象中获取 this 引用,请使用 function 关键字声明它:

let ObjArr = [{
  name: 'Charles',age: 30,visible: function(aName,anAge) {
    return (((this.name === aName) && (this.age === anAge)) ? true : false)
  }
}]

console.log(ObjArr[0].visible('Charles',30)) // It should be true
console.log(ObjArr[0].visible('Peter',30)) // It should be false
console.log(ObjArr[0].visible('Charles',25)) // It should be false too

或者,您可以使用“方法”语法:

let ObjArr = [{
  name: 'Charles',visible(aName,anAge) {
    return (((this.name === aName) && (this.age === anAge)) ? true : false)
  }
}]

效果一样。


奖励指针:如果你有一个布尔值 x,那么表达式 x ? true : false 就等价于 x。这意味着您的函数可能是:

  function(aName,anAge) {
    return (this.name === aName) && (this.age === anAge)
  }
,

如果要使用 this 引用,则不能使用箭头函数;但是,您可以使用 method definition shorthand

let ObjArr = [{
  name: 'Charles',anAge){
    return (((this.name === aName) && (this.age === anAge)) ? true : false)
  }
}]

console.log(ObjArr[0].visible('Charles',25)) // It should be false too

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。