首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原型不在web工作者内部工作

原型不在web工作者内部工作
EN

Stack Overflow用户
提问于 2014-02-19 23:32:09
回答 1查看 1.4K关注 0票数 1

简单地说,我试图在web工作者中建立一个函数的原型,而is正在抛出这个错误:

Uncaught TypeError: Object #<DedicatedWorkerContext> has no method 'compute'

我认为需要一些示例代码。这是我的工作一天的结束,所以我要把这件事做得很快。整个下午我都在唠叨。我希望这是我明天早上回来说“啊-哈”的问题之一,但在偶然的机会下,我想我也会在这里问。

page.js

代码语言:javascript
复制
function threaded() { 
   var thread = new Worker('worker.js');
   thread.postMessage({a: 1 b: 2});
   thread.onMessage = function (e) { 
     console.log(e.data)
   });
}
threaded();

worker.js

代码语言:javascript
复制
var foo = function(a,b) { 
   this.a = a
   this.b = b
   this.result = false;
   this.compute();
};

foo.prototype.compute = function() { 
   this.result = this.a * this.b;
};

onmessage = function(e) { 
   var msg = foo(e.data.a,e.data.b)
   postMessage(msg)
};

我还尝试以不同的方式将foo()包含在onmessage中,但收到了以下错误:

Uncaught TypeError: Cannot set property 'a' of undefined

worker-take2.js

代码语言:javascript
复制
onmessage = function(e) { 

   var foo = function(a,b) { 
      this.a = a
      this.b = b
      this.result = false;
      this.compute();
    };

   foo.prototype.compute = function() { 
     this.result = this.a * this.b;
   };

   var msg = foo(e.data.a,e.data.b)
   postMessage(msg)
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-19 23:38:11

问题是您正在执行foo,而不是声明它的new实例。因此,thisfoo上下文中的计算结果为专用工作人员上下文,而不是对象实例上下文。

试试这个:

代码语言:javascript
复制
var foo = function(a,b) { 
   this.a = a
   this.b = b
};

foo.prototype.compute = function() { 
   return this.a * this.b;
};

onmessage = function(e) { 
   var msg = new foo(e.data.a,e.data.b).compute();
   postMessage(msg)
};

有一些重要的变化需要注意。首先,我更改了compute以返回结果,而不是将其设置为属性。请记住,当使用prototype时,您将显式地创建跨对象实例共享的方法,从而意味着您以面向对象的方式使用了该代码。

其次,我更改了foo的构造函数,这样它就不会立即调用compute。相反,在声明对象实例之后调用compute

试试看!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21894932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档