Мій колега використовував "нову функцію ()" з малої літери "f" для визначення нових об'єктів у JavaScript. Це, здається, працює добре у всіх основних браузерах, а також, здається, досить ефективно приховувати приватні змінні. Ось приклад:
var someObj = new function () {
var inner = 'some value';
this.foo = 'blah';
this.get_inner = function () {
return inner;
};
this.set_inner = function (s) {
inner = s;
};
};
Як тільки "це" використовується, воно стає суспільним надбанням деякихObj. Тож деякіObj.foo, someObj.get_inner () та someObj.set_inner () доступні для всіх. Крім того, set_inner () та get_inner () є пільговими методами, тому вони мають доступ до "внутрішнього" через закриття.
Однак я ніде не бачив жодної згадки про цю техніку. На це скаржиться навіть JSLint Дугласа Крокфорда:
- дивна конструкція. Видалити "нове"
Ми використовуємо цю техніку у виробництві, і, здається, вона працює добре, але я трохи занепокоєний цим, оскільки це ніде не зафіксовано. Хтось знає, чи це дійсна техніка?
this
буде посилатися на елемент, який запустив подію, а не на ваш об'єкт, але ви могли просто мати цеvar instance = this
.