【问题标题】:Retrieving list of all variables inside a web worker检索网络工作者中所有变量的列表
【发布时间】:2014-04-18 23:43:06
【问题描述】:

这是我之前的问题here 的后续,我的代码与接受的答案中的代码相似。

我正在创建一个为初学者教授编程的网站,我想在学生运行代码后进行某种自动化测试,以查看他们的变量是否已定义、是否具有正确的值等等。换句话说,我需要this 之类的东西,但是将其作为附加的postMessage() 消息发送给我[object global]。我也不能使用window,因为它在那个范围内不存在。

示例:用户编写代码

var name = "somename"; var age = 25;

应该返回一个包含["name": "somename", "age": 25]的数组或对象

http://pastebin.com/S1xxds43

【问题讨论】:

    标签: javascript web-worker


    【解决方案1】:

    你试过了吗

    CanvasRenderingContext2D.prototype[methodName] = function() {
        var self = this;
        postMessage({called: methodName, args: arguments, currentObjectAttributes: self});
    };
    

    【讨论】:

    • 我不确定我是否理解你:你的第一个代码和我现在的一样。我在哪里通过Object.keys(self)?我已使用 pastebin 将问题更新为我当前的代码。
    • 不,不是。我无法运行你的代码,所以这只是推测,但看起来你的 postMessage 方法是在外部范围内定义的,当你调用它时,this (又名当前上下文)将成为全局对象.如果您希望this 的上下文成为画布的实例,则需要将该上下文保存在类似self 的变量中,以便您可以传入正确的对象。另外,因为您将整个对象作为“currentObjectAttributes”传递,所以我认为您可能只需要self 对象的属性。您可以使用Object.keys 访问这些属性的数组。
    • 请注意,this 仅在调用时被定义为上下文。在调用postMessage 之前,您传递给postMessage 的那个对象实际上并不存在,并且只有在那个时刻才会评估this 的值和上下文。
    • 我不确定我是否让您感到困惑,或者我让自己感到困惑,因为我不太确定他的功能是做什么的(Javascript 不是我使用的主要语言)。无论哪种情况,我都很抱歉。我想要的是有一个编辑器并让用户编写一些代码,比如说var name = "someName"; var age = 25;。用户单击一个按钮来运行代码,这将启动 web worker。当工作人员完成时,即发送退出消息,返回这些变量的值。它不必在 Canvas 的上下文中。
    • 如果我使用你的代码,画布上什么也画不出来,尽管其他功能都在工作。我尝试做postMessage(['exit', Object.keys(self)]),但它似乎只返回变量的名称,而不是它们的值。
    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 2015-03-16
    • 2019-02-01
    • 2016-02-21
    • 1970-01-01
    相关资源
    最近更新 更多