Вести разработку с отключенными предупреждениями и без валидации кода, наобум без чтения документации все равно, что с закрытыми глазами и ушами - конечно будет интересно все... Этой привычкой не следует злоупотреблять - нужно настроить среду разработки на проверку ошибок на лету как минимум, если лень читать основы языка. Нормальные редакторы и среды, осмысленные подходы, позволяют это делать.
function MyClass(){};
MyClass.prototype.run = function(){ console.log(this); };
var x = new MyClass;
x.run(); // [object Object]
var y = x.run;
y(); // [object Window] или undefined если режим strict (см. "use strict")
Так что DOM там не при чём.
document.write() — перезаписывает документ, если его загрузка к этому моменту уже была завершена. AFAIR, ещё и асинхронным js loader'ам мешает.