this - как обратиться
-
Как обратиться к глобальному объекту this? Пока использую новый класс с различными функциями, расширяющими функционал BAS, но хотел бы расширить класс, из-под которого вызываются все стандартные функции BAS типа url или render. Попробовал
BASExtended.prototype.__proto__ = this.prototype;
,
но не работает, т.к. вряд ли правильно так делать, нужноBASExtended.prototype.__proto__ = *имя_класса_this*.prototype;
Но имя класса this неизвестно, переменной window тоже нет, чтобы хоть как-то его посмотреть.
-
@blackhacker this должен быть виден.
Если он где-то перекрылся в другом контексте, можно сохранять его в выполняя кодwindow = this
И обращаться к window
-
@support this то виден, но ведь он создан из какого-то класса или объекта. Так вот какое название у этого класса/объекта? Единственное, что удалось выудить - имя конструктора объекта [Object global], но переменную global не видит. Хочется например переопределить какой-либо из методов BAS, и дополнить его
Например переопределить метод load, чтобы функция принимала реферер:BASExtended.prototype.load = function (u, ref) { header('Referer', ref)! load(u)! };
BASExtended же будет расширять класс this, но вот какой класс у this, неизвестно
-
@blackhacker глобальный объект создается один раз. Можно не переопределять его прототип, а просто присвоить метод экземпляру уже созданного объекта.
Тут сложность в том, чтобы создать функцию, которую можно вызывать без _call
Для этого функция должна иметь последним аргументом callback и передавать его в последнюю асинхронную функцию обернув в _get_function_bodythis.load_old = this.load this.load = function(url,ref,callback){ this.load_callback = callback this.load_url = url header('Referer', ref)! load_old(this.load_url, _get_function_body(this.load_callback)) }
После выполнения следующего кода, можно вызывать
load("https://www.whatismyreferer.com/","google")!
-
@support Спасибо за ответ, все понял) Сложно оказалось в плане переопределения, лучше оставлю как есть, отдельным классом
-
@blackhacker Вообще переопределение не самая лучшая практика. http://stackoverflow.com/questions/14034180/why-is-extending-native-objects-a-bad-practice