Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/google闭包库中的类型转换_Javascript_Google Chrome Extension_Google Closure Library - Fatal编程技术网

Javascript/google闭包库中的类型转换

Javascript/google闭包库中的类型转换,javascript,google-chrome-extension,google-closure-library,Javascript,Google Chrome Extension,Google Closure Library,我正在通过chrome.extension.SendMessageAPI将一个由goog.structs.Set组成的复杂对象从我的内容脚本传递到后台页面。另一方面,这个goog.structs.Set作为对象接收 我如何将其键入回goog.structs.Set,以便调用它的各种方法?您是指闭包编译器吗 function receiveStructsSet( aSetObject ){ var mySet = /** @type {goog.structs.Set} */ (aSe

我正在通过
chrome.extension.SendMessage
API将一个由
goog.structs.Set
组成的复杂对象从我的内容脚本传递到后台页面。另一方面,这个
goog.structs.Set
作为
对象接收

我如何将其键入回
goog.structs.Set
,以便调用它的各种方法?

您是指闭包编译器吗

function receiveStructsSet( aSetObject ){

    var mySet =  /** @type {goog.structs.Set} */ (aSetObject); 
}

也可以在函数声明之前使用注释

/**
 *  @param {goog.structs.Set} aSetObject description of object
 */
function receiveStructsSet( aSetObject ){
  aSetObject.getCount();
}
请参阅,您只能使用chrome.extension.SendMessage传递JSON

就个人而言,我使用简单对象作为集合,并避免使用goog.structs.set:

var MySet = Object.create(null);

如果use必须使用goog.structs.Set,则需要将其序列化并反序列化为JSON。

请务必注意额外的括号。不,这不是我要找的。闭包编译器与我的问题无关。在chrome扩展中,我正在将一个set对象从内容脚本传递到背景页面。在后台页面中,set仅作为一个对象接收,我无法在该对象上调用set特定的方法。在这种情况下,我可能只会传递数据,然后从另一端创建一个新的
struct.Set
。我不明白你所说的“我使用简单对象作为集合,避免使用goog.structs.Set”是什么意思。我使用Set是因为我不希望重复条目。您的意思是自己在简单对象中实现“唯一条目”属性吗?如果对象可以是JSON的一部分,javascript中的所有内容都是对象(对象只是数据,带有属性和方法..来自W3schools),那么为什么Set不是对象?W3schools是一个错误的引用。JSON是JavaScript的一个子集,对象只能包括对象、数组和基本数据(字符串号、bool)。具体来说,它不能具有函数属性。由于对象不能包含重复的属性,因此它自然是一个集合。在发送复杂对象之前,我将goog.structs.set转换为数组。参见下面的@John answer's以获取备选方案