Javascript 对象文字中JS作用域中的未定义变量
我有以下代码: 问题是,我没有定义输出,我想知道如何访问click处理程序中的人Javascript 对象文字中JS作用域中的未定义变量,javascript,Javascript,我有以下代码: 问题是,我没有定义输出,我想知道如何访问click处理程序中的人 注意:单击处理程序只是我的问题的一个例子,我在另一个上下文中也有它。有一个众所周知的技巧来保留对函数原始范围的引用: init: function() { var self = this; $( '#foo' ).click( function() { console.log( self.person ); } ); }, 基本上,您需要将这个变量缓存到另一个变量中,在本例中称为self。然后
注意:单击处理程序只是我的问题的一个例子,我在另一个上下文中也有它。有一个众所周知的技巧来保留对函数原始范围的引用:
init: function() {
var self = this;
$( '#foo' ).click( function() {
console.log( self.person );
} );
},
基本上,您需要将这个变量缓存到另一个变量中,在本例中称为self。然后,在click处理程序内部,您可以访问self变量,就像它是click处理程序外部的this变量一样
另一种选择是简单地使用主干网的事件委派:
var test = {
events: {
"click #foo": "foo_click_handler"
}
person: "nick",
foo_click_handler: function() {
// callback is bound to the view scope, so "this" can be used normally.
console.log( this.person );
},
};
发件人:
所有附加的回调在传递给jQuery之前都会绑定到视图,因此当调用回调时,它会继续引用视图对象
这是因为在单击处理程序中,这实际上是指触发事件的控件 我已经更新了你的代码,它是有效的。这是你需要做的
var test = {
person: "nick",
init: function() {
var obj = this;
$('#foo').click(function() {
// how to access the person?
alert("inside");
console.log(obj.person);
});
},
};
test.init();
而不是使用var self=this;例如,保存对您的对象的引用,或者保存JavaScript标准库中包含的我将使用的其他事件库,这将使您的代码更加简洁,模块化程度更高
bind所做的是将函数logperson绑定到您传递它的任何对象上,在本例中
这确实使您不再使用匿名函数,但是出于我个人的偏好,匿名函数总是更好
var logperson = function() {
console.log(this.person);
};
var test = {
person: "nick",
init: function() {
$('#foo').click(logperson.bind(this));
};
};
var logperson = function() {
console.log(this.person);
};
var test = {
person: "nick",
init: function() {
$('#foo').click(logperson.bind(this));
};
};