我遇到的问题特别是与D3.js有关,但是我之前也遇到过类似的问题,并且总是以破解来解决。
我有一个包含对象数组的类。有一个从CSV文件添加新对象的功能。使用d3.csv
。此函数采用一个文件名和一个带有一个参数(csv文件的当前已分析行)的回调函数。我想将每个已分析的行附加到this.objects
,但this
不再在函数范围内。
function MyClass(){
this.objects = [];
this.add_objects = function(filename){
d3.csv(filename, function(data){
//Callback fired for each parsed line in csv file
//Now I want to push data to this.objects...
}
}
}
在javascript中执行此操作的常见方法是在父范围中使用闭包变量:
function MyClass(){
var self = this;
this.objects = [];
this.add_objects = function(filename){
d3.csv(filename, function(data){
//Callback fired for each parsed line in csv file
// you can access self here
self.objects.push(xxx);
});
}
}
或者该变量可能更具体:
function MyClass(){
this.objects = [];
var objectArray = this.objects;
this.add_objects = function(filename){
d3.csv(filename, function(data){
//Callback fired for each parsed line in csv file
// you can access objectArray here
objectArray.push(xxx);
});
}
}
或者,您可以使用.bind()
(如果不需要支持像IE8这样的旧版IE)创建一个包装器,该包装器将强制设置this
您的回调:
function MyClass(){
this.objects = [];
this.add_objects = function(filename){
d3.csv(filename, function(data){
//Callback fired for each parsed line in csv file
this.objects.push(xxx);
}.bind(this));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句