abstract js