我创建了一个包含方法redraw()
的对象Chart
。因为从redraw()
内的this
的上下文已从Chart
对象更改为DOM元素,所以我无法访问对象Chart
的属性(例如:this.data
)。在Javascript中引用对象的方法
的jsfiddle:http://jsfiddle.net/a4tbG/1/
试着在灰色框拖拽到触发redraw()
问题:如何从功能chart.redraw
访问父对象chart.data
?
chart = new Chart();
chart.init();
function Chart() {
this.data = [1, 2, 3];
this.init = function() {
var zoom = d3.behavior.zoom()
.on("zoom", this.redraw);
d3.select('#chart')
.append('svg:svg')
.attr('width', 300)
.attr('height', 300)
.call(zoom);
}
this.redraw = function() {
console.log(this); // Output the DOM element #chart svg. How do you access the object?
console.log(this.data);
}
}
使用'bind()的'在dystroy的答案,或者使用'$ .proxy(this.redraw,这一点)'支持旧的浏览器 –
@ A.Wolff浏览器不绑定不支持画布或SVG。 –
@dystroy该死的;;) –