javascript - 获取函数调用者作用域

标签 javascript scope this

是否可以提取函数调用者作用域?

我有这个例子:

var myObject = {
    id: 1,
    printId: function() {
        var myId = function() {
            return this.id;
        }
        console.log(myId());
    }
}

myObject.printId(); // prints 'undefined'

上面的示例打印出 undefined,因为“this”似乎是新函数中默认的窗口范围(在本例中为 myId)。有什么方法可以在执行之前使用应用正确范围的代理?

像这样的(虚构的):

var execute = function( fn ) {
    fn.apply(fn.caller.scope);
}

var myObject = {
    id: 1,
    printId: function() {
        var myId = function() {
            return this.id;
        }
        execute( myId );
    }
}

最佳答案

如果您使用 Prototype library你可以像这样使用 Function#bind() :

var myObject = {
    id: 1,
    printId: function() {
        var myId = function() {
            return this.id;
        }.bind(this);
        console.log(myId());
    }
}

也许有点矫枉过正,但如果您广泛使用这样的对象,它可能值得查找。

关于javascript - 获取函数调用者作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1964639/

相关文章:

java - Java 中的构造函数问题

javascript - 检索 JSON 值不起作用 - JavaScript/jQuery

javascript - 使用 XMLHttpRequest 发送带有数据的文件

javascript - 跨文件的 Typescript 全局变量

c++ - 类范围内的限定名称查找

ruby - 本地范围到底是什么?

javascript - 如何使用 Web 中的 API 将 .txt 转换为 .gpx 或获取 GPX 导出?

javascript - 为什么 onclick ="ShowLocalDate()"只工作一次,它遇到的第一个

jquery - 每个 Div 加载时淡入多个 Div

javascript - 如何使用 `this` 和 "strict"模式确定常规箭头 fn 内正确的 "non-strict"?