如何解决将属性作为对象中的函数
我有一个对象数组,所有对象都具有相同的属性,但其中一个属性应该是一个函数,它决定对象是否“可见”
类似于:
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
。不管那个对象是什么,它可能没有 name
或 age
属性,这意味着 this.name
是 undefined
,this.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 举报,一经查实,本站将立刻删除。