JavaScript上下文

Pra*_*sad 3 javascript scope

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'对象.我的问题是,有没有办法解决这个问题?

Mil*_*OSS 7

解决这个问题的方法是在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)


Jor*_*nes 5

让它在范围内执行的一种方法User是将Test函数传递给作用域.

function Test(fn, scope) {
    fn.apply(scope || window);
}
Run Code Online (Sandbox Code Playgroud)

如果没有传递范围,这将把传递的函数应用于传递的范围或窗口.

Test(User.Show, User)会警觉的Age= 26.