Мой коллега использовал «new function ()» со строчной буквой «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;
};
};
Как только "this" используется, оно становится общедоступным свойством someObj. Итак, someObj.foo, someObj.get_inner () и someObj.set_inner () все доступны публично. Кроме того, set_inner () и get_inner () являются привилегированными методами, поэтому они имеют доступ к «внутреннему» через замыкания.
Однако я нигде не встречал упоминания об этой технике. Даже JSLint Дугласа Крокфорда жалуется на это:
- странная конструкция. Удалить "новый"
Мы используем эту технику в производстве, и она, кажется, работает хорошо, но меня это немного беспокоит, потому что она нигде не задокументирована. Кто-нибудь знает, действительна ли это техника?
this
будет ссылаться на элемент, который инициировал событие, а не на ваш объект, но вы могли бы просто использоватьvar instance = this
вместо этого.