预先感谢任何回复: 我不认为这是重复的:我在第一条评论中回顾了那篇文章,这只是对象的一般细分,并使用"这个"在javascript中。
我的另外这个。功能表现得很好,所以我至少已经了解了JS Obj的基础知识。
此问题与在构造对象中使用带有this.function的.map()有关。
以下Google Appscript代码使用.map()更新二维数组中的字符串。 [[string,int],[string,int]]
出于某种原因,当使用.map()时,它无法访问该功能" this.removeLeadingZero"。如果在OBJ之外放置相同的功能,则可以调用它,一切正常。由于某种原因,系统声称row [0]是[object,Object],但是当我输入(row [0])时,它返回" string"正如它应该。
错误: TypeError:在对象[object Object]中找不到函数removeLeadingZero。 (第106行,文件" DEEP UPC MATCH")
使用this.function在对象中使用.map()或使用不正确的语法是否有任何问题?
function test2DMapping(){
var tool = new WorkingMappingExample()
var boot = tool.arrayBuild();
Logger.log(boot)
}
function WorkingMappingExample(){
this.arr= [["01234", 100],["401234", 101],["012340", 13],["01234", 0422141],["01234", 2],["12340",3],["01234", 1],["01234", 2],["12340",3],["01234", 1],["01234", 2],["12340",3],["01234", 1],["01234", 2],["12340",3]];
//mapping appears faster that normal iterations
this.arrayBuild = function(){
var newArray1 =
this.arr.map( function( row ) {
**var mUPC = removeLeadingZero2(row[0])** //working
**var mUPC = this.removeLeadingZero(row[0])** // not working
var index = row[1]
Logger.log(mUPC + " " + index)
row = [mUPC, index]
return row
} )
return newArray1;
};
}; //end of OBJ
//THE NEXT 2 FUNCTIONS ARE WORKING OUTSIDE OF THE OBJECT
function removeLeadingZero2(upc){
try {
if (typeof(upc[0]) == "string"){
return upc.replace(/^0+/, '')
} else {
var stringer = upc.toString();
return stringer.replace(/^0+/, '')
}
} catch (err) {
Logger.log(err);
return upc;
}
}
function trimFirstTwoLastOne (upc) {
try {
return upc.substring(2, upc.length - 1); //takes off the first 2 #'s off and the last 1 #'s
} catch (err) {
Logger.log(err);
return upc;
}
}
答案 0 :(得分:2)
在传递给map
的函数内部,this
并未指出您的想法。映射函数有自己的this
,它通常引用window
:
var newArray1 = this.arr.map(function(row) {
// this === window
var mUPC = this.removeLeadingZero(row[0]);
var index = row[1];
Logger.log(mUPC + " " + index);
return [mUPC, index];
});
您有四种选择:
Array#map
需要thisArg
,您可以用map
告诉this
函数中的var newArray1 = this.arr.map(function(row) {
// this === (outer this)
var mUPC = this.removeLeadingZero(row[0]);
// ...
}, this); // pass a thisArg
对象应该是什么:var newArray1 = this.arr.map(function(row) {
// this === (outer this)
var mUPC = this.removeLeadingZero(row[0]);
// ...
}.bind(this)); // bind the function to this
bind
功能:this:
var self = this;
var newArray1 = this.arr.map(function(row) {
// self === (outer this)
var mUPC = self.removeLeadingZero(row[0]);
// ...
});
var newArray1 = this.arr.map(row => {
// this === (outer this)
var mUPC = this.removeLeadingZero(row[0]);
// ...
});
export class SmallComponent{
private items: Item[] = [];
[...]
openDepositModal(){
if(!items){
this.authService.getUserInventory().subscribe(data => {
this.items = data; <-- HERE
});
}
}
此外,你可以stop using this
and new
。
答案 1 :(得分:0)
我已经解决了这个问题,以下是其他人遇到此问题的答案:
这需要放入变量:
var _this = this;
然后你可以在对象中调用它: var mUPC = _this.removeLeadingZero(row [0])
Javascript范围再次出现!