What is a more elegant way to overcome Error: Expecting object specifier. Argument has no object specifier when sending an SMS via Messages via JXA

What is a more elegant way to overcome Error: Expecting object specifier. Argument has no object specifier when sending an SMS via Messages via JXA

这不起作用

    with (Application("Messages")) { 
            send(text, {to: services["SMS"].buddies[phone]}) 
    }

与 错误:需要对象说明符。参数没有对象说明符。

文本有效且不为空。 phone 有效且不为空。 如果我硬编码它起作用的值。我决定尝试 'dynamic' 有效的硬编码。

    command = 'with (Application("Messages")) { send("' + text + '", {to: services["SMS"].buddies["' + phone + '"]}) } ;' ;
    eval(command) ;

有没有更优雅的方法来克服这个问题? 为什么 eval 可以工作,但带有变量的代码却不行?

将代码分解成更小的部分对我很有帮助。

var text="foo"
var phone="+14159999999"
var Messages = Application('Messages')
var service = Messages.services[0]
var recipient = service.buddies.byName(phone, {
    of: service
})

Messages.send(text  , {
    to: recipient
})