В настоящее время я создаю объекты в javascript, объявляя конструкцию (обычную функцию), затем добавляю методы к прототипу, например так:
function Test(){
}
Test.prototype.test1 = function(){
var me = this;
}
Однако я бы хотел избежать объявления var me = this
ввершина каждой функции.Кажется, что работает следующее, но кажется, что это будет очень неэффективно:
$(document).ready(function(){
var n = 0;
(function(){
function createTest(){
var me;
function Test(){
this.n = n;
this.testArr = [1, 2, 3, 4];
n++;
}
Test.prototype.test1 = function(){
me.test2();
};
Test.prototype.test2 = function(){
alert(me.n);
$.getJSON('test.php', {}, function(reply)
//want to be able to use 'me' here
me.newField = reply;
});
};
var t = new Test();
me = t;
return t;
}
window['createTest'] = createTest;
})();
var t = createTest();
t.test1();
var t2 = createTest();
t2.test1();
t.test1();
});
Этот код выводит ожидаемый результат, но действительно ли он так же неэффективен, как выглядит (объект Test повторно объявляется каждый раз, когда выcall createTest ())?
В любом случае, это может показаться немного странным ... Есть ли совершенно другой способ сделать это лучше?
РЕДАКТИРОВАТЬ: реальная причина, по которой я хотел бысделать это так, чтобы обратные вызовы, такие как в test2, имели ссылки на правильный this
.