Я не уверен, что вы подразумеваете под вредоносным объектом, который действует как число, но может выполнять любой код
То, что вы сделали, это просто переопределили метод valueOf
вашего пользовательского объекта Num
.
от MDN,
JavaScript вызывает метод valueOf для преобразования объекта в
примитивное значение
В вашем коде var x = n + 1;
, поскольку n имеет тип Object, а 1 имеет примитивный тип, javascript пытается вызвать valueOf
, чтобы получить примитивное значение n и добавить его к 1.
Поскольку это ваш собственный объект с вашим методом overidden valueOf
, ваш пользовательский valueOf
будет выполнен для преобразования объекта в примитивный тип.
Подробнее о valueOf .