如何访问地图内的功能?
How to access function inside map?
是的,我知道,有很多关于此的信息,但我无法让它发挥作用。
我试图在 update
函数中访问地图内的函数 checkType
,但我得到了众所周知的 TypeError: Cannot read property 'checkType' of undefined
显示一些代码:
function builder() {
return {
update(data){
let keys = someFunctionGettinTheKeys();
let query = keys.map((key) => key + ' = ' . **this.checkType(data[key])**);
return query;
},
checkType(data){
/*...some code...*/
}
}
}
我试过:
- 绑定'this'
- 老式地图
- 将 'this' 作为参数传递给映射
我做错了什么?
你能不能不做下面的事情?
function bulider(){
const checkType = (data) => {
/* do type check */
return 'text'
}
return {
update(data) {
let keys = someFunctionGettinTheKeys()
let query = keys.map((key) => key + ' = ' + checkType(data[key]))
return query
},
checkType: checkType
}
}
用法:
const { update } = builder()
const transformedData = update(data)
Array.prototype.map() 采用第二个参数来设置 this 在映射函数中引用的内容,因此将其作为第二个参数传递以保留当前上下文:
arr.map(function(el) {
...
}, this);
您的代码更改 =>
function builder() {
return {
update: function() {
let arr = [1,2,3,4,5,6,7,8,9,10];
let newArr = arr.map((element) => {
return this.check(element)
}, this);
console.log(newArr)
},
check: function(num) {
return num * 2;
}
}
}
builder().update();
问题出在函数调用之前的那个点上。我用“+”替换了那个点,现在它可以工作了。
就这些。尴尬,但真实。
是的,我知道,有很多关于此的信息,但我无法让它发挥作用。
我试图在 update
函数中访问地图内的函数 checkType
,但我得到了众所周知的 TypeError: Cannot read property 'checkType' of undefined
显示一些代码:
function builder() {
return {
update(data){
let keys = someFunctionGettinTheKeys();
let query = keys.map((key) => key + ' = ' . **this.checkType(data[key])**);
return query;
},
checkType(data){
/*...some code...*/
}
}
}
我试过:
- 绑定'this'
- 老式地图
- 将 'this' 作为参数传递给映射
我做错了什么?
你能不能不做下面的事情?
function bulider(){
const checkType = (data) => {
/* do type check */
return 'text'
}
return {
update(data) {
let keys = someFunctionGettinTheKeys()
let query = keys.map((key) => key + ' = ' + checkType(data[key]))
return query
},
checkType: checkType
}
}
用法:
const { update } = builder()
const transformedData = update(data)
Array.prototype.map() 采用第二个参数来设置 this 在映射函数中引用的内容,因此将其作为第二个参数传递以保留当前上下文:
arr.map(function(el) {
...
}, this);
您的代码更改 =>
function builder() {
return {
update: function() {
let arr = [1,2,3,4,5,6,7,8,9,10];
let newArr = arr.map((element) => {
return this.check(element)
}, this);
console.log(newArr)
},
check: function(num) {
return num * 2;
}
}
}
builder().update();
问题出在函数调用之前的那个点上。我用“+”替换了那个点,现在它可以工作了。 就这些。尴尬,但真实。