Я уже запутался, что и как вызывать. То w добавляет в цепочку, то wait да ещё и в функцию обернуть.
Останемся каждый при своём, тебе наверное так удобнее.
Кстати:
var self = this;
можно не писать, если сделать так:
var c = new chain();
c.
add(function(){
setTimeout(function () {
c.next();
}, 1000);
}).
...