This question explains how to tell if an object has a setter defined on that very object but it may still have one elsewhere in the prototype chain. Is there a builtin that lets one check if there is a setter defined somewhere on the prototype chain or does one simply have to recurse and test each element on the prototype chain?
No, there is no such builtin. You'll have to traverse the prototype chain and call Object.getOwnPropertyDescriptor on every object.