var User = {
Name: "Some Name", Age: 26,
Show: function() { alert("Age= "+this.Age)};
};
function Test(fn) {
fn();
}
Test(User.Show);
Run Code Online (Sandbox Code Playgroud)
===============
代码显示的警报是"Age = Undefined".我理解,因为User.Show函数是从Test()内部调用的,所以引用'this'的'Test()'函数而不是'User'对象.我的问题是,有没有办法解决这个问题?
解决这个问题的方法是在Test函数内部传入你将"this"作为范围的对象...
function Test(fn, scope, args) {
fn.apply(scope, args);
}
Test(User.Show, User, []);
Run Code Online (Sandbox Code Playgroud)
args数组允许您另外传入您可能拥有的任何参数.您也可以保留Test函数,只需传入一个匿名函数......
Test(function() {User.Show()});
Run Code Online (Sandbox Code Playgroud)
让它在范围内执行的一种方法User是将Test函数传递给作用域.
function Test(fn, scope) {
fn.apply(scope || window);
}
Run Code Online (Sandbox Code Playgroud)
如果没有传递范围,这将把传递的函数应用于传递的范围或窗口.
Test(User.Show, User)会警觉的Age= 26.
| 归档时间: |
|
| 查看次数: |
2256 次 |
| 最近记录: |