You can use Object.defineProperty function [1], [2] to make properties non-writable and non-configurable (i.e., can't be written, can't be deleted or configured to make it writable again etc.) For example, the following
Object.defineProperty(this, "quit", { writable: false, configurable: false }) will make quit function non-writable and non-configurable. You can do the same for all builtin properties of global object just before evaluating any other code: (function() { var keys = Object.getOwnPropertyNames(this) for (var k in keys) { Object.defineProperty(this, keys[k], { writable: false, configurable: false }) } })() quit = 4 print(typeof quit) print(quit) Java = "hello" print(typeof Java) print(Java) [1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty [2] http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.3.6 Hope this helps, -Sundar On 3/1/2016 7:13 AM, Trig Chen wrote: > I'm using nashorn engine in embedding mode and providing user a command > line textbox to interactive with nashorn. It's fund that nashorn engine's > built-in functions or objects such as quit, Java were overwritten by user's > mistaken typing: > > quit=3; Java="Hello"; > > Is there a way to prevent user overwrite the built-in functions, objects > and java objects exposed to nashorn engine?