当我进入函数时,如何保留this
的值我丢失了this
的先前值
例如,在这种情况下,我如何才能访问testFunction
。
admin = function()
{
this.testFunction = function()
{
alert('hello');
}
this.test2Function = function()
{
$.ajax({
url:'',
success: function()
{
this.testFunction();
// here I got an error undefined
}
});
}
}
我试图将此值保留在像这样的自变量
上this.self = this;
但没有工作
答案 0 :(得分:5)
您需要使用closure。在JavaScript中执行此操作的惯用方法是:
function foo(){
//Store this in outer scoped variable.
// It will be available to anything within this scope
var that = this;
innerCall(function(){
that.doSomething();
});
}
答案 1 :(得分:3)
admin = function()
{
var top = this;
this.testFunction = function()
{
alert('hello');
}
this.test2Function = function()
{
$.ajax({
url:'',
success: function()
{
top.testFunction(); // should work :)
}
});
}
}
函数中定义的所有局部变量,通过WHOLE函数传播(可以访问),包括该函数中定义的所有函数。
所以var top = this;
将通过admin
内声明的所有内部函数和对象传递它的值。
答案 2 :(得分:1)
它有多种方式可以帮助您,以及适合您的大图片
admin = function()
{
this.testFunction = function()
{
alert('hello');
}
this.test2Function = function()
{
$.ajax({
url:'',
success: this.testFunction
});
}
}
或
admin = function()
{
var testFunction = function()
{
alert('hello');
}
this.test2Function = function()
{
$.ajax({
url:'',
success: testFunction
});
}
}
或
admin = function() { this.testFunction = function() { 警报( '你好'); }
var testFucntion = this.testFunction;
this.test2Function = function()
{
$.ajax({
url:'',
success: function(){ testFucntion(); }
});
}
}
答案 3 :(得分:0)
所有答案都是正确的,只是为了记录,参考google style guide:
因为这很容易出错,所以将其用途限制在那些地方 需要的地方:
在建设者中 在对象的方法中(包括在创建闭包中)
IMO,最好的方法是Josh's answer。
答案 4 :(得分:0)
另一种避免处理this
的潜在有效方法是制作回调参数:
admin = function()
{
this.testFunction = function()
{
alert('hello');
}
this.test2Function = function(successCallback)
{
$.ajax({
url:'',
success: function()
{
if(typeof(successCallback) === 'function') {
successCallback();
}
}
});
}
}
//usage:
admin.test2Function(admin.testFunction);