如何获得 JXA 对象的实际 class

How do I get actual class of JXA object

我试图区分 iTunes 播放列表是文件夹还是不是文件夹。

在 AppleScript 中似乎有两种方法可以做到这一点:

  1. 我可以获取所有文件夹播放列表并从用户播放列表中单独处理它们:

    set userPlaylists to user playlists
    set folderPlaylists to folder playlists
    -- …do processing
    
  2. 我可以使用 class of pl is folder playlist 检查播放列表的 class(其中 pl 是我的播放列表)。

这两种方法似乎都不适用于 JXA。

第一种方法不起作用,因为访问 .folderPlaylists() 会导致 Error: Message not understood(其中 app = Application('iTunes'))。可以通过这种方式访问​​所有其他类型的播放列表(app.playlists()app.libraryPlaylists()app.radioTunerPlaylists()app.subscriptionPlaylists()app.userPlaylists()app.audioCDPlaylists() 都可以)。这是一个错误吗?

所以我尝试复制第二种方法。据我所知,ObjectSpecifier.classOf 应该给我对象类型作为字符串。但是,它只是 return 为我提供对象的对象说明符所请求的类型。

所以在 AppleScript 中 class of (first item of (playlists whose name is "«Name of a folder playlist»")) 给我 folder playlistObjectSpecifier.classOf(app.playlists.whose({name: '«Name of a folder playlist»'})()[0]) 只是 returns "playlist"(大概是因为我用 app.playlists到达对象)。

难道没有函数可以 return 播放列表的实际类型(例如 "folder playlist""user playlist")?

从播放列表中获取文件夹:

folderList = itunesApp.playlists.whose({_match: [ObjectSpecifier().class, 'folderPlaylist']})()

从播放列表对象区分 userPlaylist 和 folderPlaylist:

  • 使用:myobj.class() == 'folderPlaylist'
myList = itunesApp.playlists()
for (var i in myList) {
    if (myList[i].class() == 'folderPlaylist') { 

    } else if (myList[i].class() == 'userPlaylist') {

    }
}