如何使用 setTimeout 这样的函数来调用对象的成员函数,并在被调用函数中使用 this 关键字?
请联系我的来源。我通过使用Javascript 闭包变量来模拟这个。在我的情况下,被称为函数的参数 context 实际上 this 对象 o :
var Utils =
{
Caller: function( context, func )
{
var _context = context;
var _func = func;
this.call = function()
{
_func( _context );
};
return this;
}
};
// example of using:
function Object()
{
this._s = "Hello, World!";
this.startTimer = function()
{
var caller = new Utils.Caller( this, this._hello );
setTimeout( caller.call, 1000 );
};
this._hello = function( context )
{
alert( context._s );
}
}
var o = new Object();
o.startTimer();
是否可以保存_hello()函数的常规声明并使用关键字 this ,但不能在内部使用 context ?
答案 0 :(得分:1)
如果您尝试隐藏传统OOP的传统私人成员,请使用以下内容:
function MyObj() {
// setup private closure scope
var that = this; // keep reference to this in constructor closure scope
var s = "Hello, World!";
var hello = function() {
alert(s);
};
// expose public methods
this.startTimer = function() {
setTimeout(function() {
hello();
}, 1000);
};
}
var o = new MyObj();
o.startTimer();
另一种方法:
function MyObj() {
var that = this;
this._s = "Hello, World!";
this._hello = function() {
alert(this._s);
};
this.startTimer = function() {
setTimeout(function() {
hello.call(that);
}, 1000);
};
}
答案 1 :(得分:1)
好的,我不明白这个问题,这是经过一些修改后的代码:
var Utils = {
Caller: function ( context, func ) {
this.exec = function () {
func.call( context );
};
}
};
function Obj() {
this._s = 'Hello, World!';
this._hello = function () {
alert( this._s );
}
this.startTimer = function () {
var caller = new Utils.Caller( this, this._hello );
setTimeout( caller.exec, 1000 );
};
}
var o = new Obj();
o.startTimer();
告诉我你的想法。