2013-03-12 6 views
5

을 자바 스크립트 객체를 전달 importScript ("objects.js")를 사용하십시오. 이제 html 페이지에 "var a = new A()"라는 A 인스턴스를 만들고 "postMessage()"와 함께 웹 작업자에게 게시합니다.내가 그런 개체가 웹에 근무

재미있는 점은 작업자에게는 값이있는 "id"속성이 있지만 프로토 타입 기능이 손실된다는 것입니다. 프로토 타입 함수가 웹 작업자 컨텍스트가 아닌 HTML 페이지 컨텍스트에 "바인딩"되어있을 수 있습니다.

event.data.a.__proto__ = A.prototype; 

그것은 작동하고 내가 캐스트의 일종으로 볼이 ...

이제 내 질문은 그게 아니라 경우 :

그래서 제가 작업자의 일을하고있어 즉 유효한 방법 또는 프로토 타입 기능이있는 객체를 웹 작업자에게 게시하는 더 좋은 방법이있는 경우. 개체 정의는 두 컨텍스트에서 사용할 수 있습니다 ...

답변

1

웹 근로자를위한 사양은 문자열 전달 외에는 허용되지 않습니다.

Here에 대한 질문입니다.

개체 데이터를 (예를 들어) json으로 직렬화 한 다음 다른 쪽에서 역 직렬화하여 동일한 데이터로 개체의 새 인스턴스를 웹 근로자 내부에 만들어야합니다.

동일한 방법을 사용하면 개체를 다시 전달할 수 있지만 둘 다 유형 A의 개체를 만들고, serialize하고 deserialize하는 방법을 알고 있어야합니다.

+1

함수가없는 한 객체를 전달할 수도 있습니다. 적어도 그것은 모든 주요 브라우저에서 나를 위해 일하고 있습니다 ... – user2160787

+0

@ user2160787 예, 그렇습니다 만, Javascript가 자동으로 직렬화하고 간단한 객체 (예 : 배열)를 역 직렬화하기 때문입니다. – fredrik

+0

괜찮아요, 그래서 그냥 프로토 타입 함수를 거부 같아요 :) – user2160787

1

데이터를 웹 근로자에게 보내기 전에 일련 번호를 지정하는 데 사용되는 structure clone algorithm은 프로토 타입 체인을 걷지 않습니다 (자세한 내용은 § 2.7.5 Safe passing of structured data 참조). 왜 파생 된 함수가 보존되지 않는지 설명합니다.

수동으로 개체를 복원하는 것 외에도 프로토 타입 기능이있는 새 개체를 만들고 Object.assign을 사용하여받은 개체의 속성을 복사 할 수 있습니다.

둘 다 해결 방법은 프로토 타입 개체와 그 기능을 웹 작업자가 알고 있다고 가정합니다. 일반적으로 기능을 유지하면서 임의의 객체를 전송하는 자동화 된 방법은 없습니다 (기능이있는 객체 전송에 관한 내 answer ~ this related question 참조).