Вы можете запретить перечисление только в ES5-совместимых браузерах, используя Object.defineProperty()
:
Object.defineProperty(myObj, "has", { value: Object.prototype.hasOwnProperty });
defineProperty()
по умолчанию для установки не перечисляемых свойств.Лучшим подходом ES3 было бы просто создать псевдоним функции и не привязывать ее к Object.prototype
:
var has = function (ob, prop) {
return Object.prototype.hasOwnProperty.call(ob, prop);
}
Я не вижу ничего плохого и в вашем собственном подходе String.prototype.in
, за исключением, возможно, потенциальногоназывать коллизии в будущем, но это ваш звонок.Вызов его String.prototype.on
устранит неоднозначность с оператором in
.