4

Google Apps Scriptに組み込まれているタイプを再度確認する方法はありますか?ビルトインタイプのコンストラクターにアクセスする方法がわかりません。そのため、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
4

3 に答える 3

10

出力を観察した後、ほとんどの組み込みのGoogle Appsオブジェクトの場合、メソッドの出力はクラス名Logger.log()であることが明らかです。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)
}

したがって、上記のいずれかを使用して、オブジェクトのタイプをテストできます(明らかにでのみ機能する最後の1つの例を除くLogger

于 2013-09-26T02:35:30.793 に答える
1

これは必ずしもクリーンなソリューションではないようですが、それでも機能します。

プロファイルオブジェクトの場合は、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
}
于 2013-03-11T20:03:08.320 に答える
0

場合によっては、「in」を使用して、そのプロパティによってオブジェクトを検証できます。

function CheckType( fileOrFolder ) {
  if ( "getName" in fileOrFolder )
    if ( "getFiles" in fileOrFolder ) return "folder" ;
    else if ( "getBlob" in fileOrFolder)  return "file" ;
  return "neither file nor folder" ;
}

function ShowType( Obj ) {
  let Type = CheckType( Obj ) ;
  console.log( "%s is a %s", "getName" in Obj ? Obj.getName() : Obj.toString(), Type ) ;
}

ShowType( DriveApp.getFiles().next() )   ;
ShowType( DriveApp.getFolders().next() ) ;
ShowType( DriveApp ) ;
于 2020-08-29T12:25:55.603 に答える