2013-03-10 45 views
0

有没有一种方法来检查googlets应用程序脚本中的内置类型? 我不知道如何访问内置类型的构造函数。所以我不能使用instaceof操作符。谷歌应用程序脚本平台上的类型检查

例如个人资料(https://developers.google.com/apps-script/class_analytics_v3_schema_profile

function getReportDataForProfile(profile) { 
if (profile instanceof Profile) // Profile is undefined... 
... 
} 

还什么是痘痘困惑:当我拿到资料的一个实例(可变轮廓)

profile.constructor // is undefined 
+1

为什么您需要Profile构造函数?你想做什么? – 2013-03-10 19:12:05

+0

我不确定我是否需要构造函数。我想测试配置文件(功能参数)是否属于配置文件。 当然这只是一个例子。我想为任何物体做这件事。 虽然“鸭子打字”总是有可能,但我希望有一些简单的解决方案。 – vetvicka 2013-03-11 19:12:38

回答

0

看来,这不会是一个必然的清洁解决方案,但它仍然是功能性的。

如果它是一个Profile对象,那么profile.getKind()将返回analytics#profile。但是,如果未为该对象定义.getKind()方法,则会引发错误。所以看起来你必须做2次检查。

if (typeof profile.getKind != "function") { 
    if (profile.getKind() == "analytics#profile") { 
    //profile is a Profile! 
    } else { 
    //profile is some other kind of object 
    //use getKind() to find out what it is! 
    } 
} else { 
    //profile doesn't have a getKind method 
    //need a different way of determining what it is 
} 
+0

这实际上是很好的解决方案!不幸的是getKind方法并没有一直使用谷歌API。似乎getKind仅适用于“Google API服务”。但不适用于电子表格或Gmail等“默认服务”。 – vetvicka 2013-03-11 21:30:46

+0

这是我发现准确识别配置文件对象的唯一方法。我知道它没有识别任何其他物体。 – 2013-03-12 01:46:00

5

观测Logger.log()输出后,很显然,对于大多数内置了谷歌Apps的对象toString()方法的输出是类的名字:

var sheet = SpreadsheetApp.getActiveSheet() 
if (typeof sheet == 'object') 
{ 
    Logger.log( String(sheet) ) // 'Sheet' 
    Logger.log( ''+sheet   ) // 'Sheet' 
    Logger.log( sheet.toString() ) // 'Sheet' 
    Logger.log( sheet   ) // 'Sheet' (the Logger object automatically calls toString() for objects) 
} 

因此上述任何可用于测试对象的类型(除了最后一个例子明显适用于Logger

相关问题