Цитата:
|
Цитата:
|
kefi, реализация может создавать объединённые объекты (join object's), тем самым, обеспечивая оптимизацию. Вот у таких объектов, тело (блок кода) будет использоваться одно, а внутренние свойства (включая [[scope]]) будут разделены.
Могу продемонстрировать на Python'e, если есть желание (там два одинаковых метода у двух созданных инстансов будут разные (False на ==), но внутреннее свойство функции этих методов - будет ссылаться на один и тот же блок кода (True на ==)). |
Вот еще пример, в котрый я не могу въехать :
function al(o){document.write(o,'<br>')} function Class2(arg1) { this._featureAction1=function(){ al(["Class2._featureAction1"]) } ; this._featureAction1() ; // как и ожидалось вызывается метод объекта, на который показывает this, т.е. function(){ al(["Class2._featureAction1"]) } ; //this.constructor.prototype._featureAction1.call(this); this.constructor.prototype._featureAction1(); }; Class2.prototype._featureAction1=function(){ this._featureAction1(); // переполнение стека . //al(["Class2.prototype._featureAction1"]) }; c=new Class2(); На строке "this._featureAction1(); // переполнение ... " происходит зацикливание(переполнение стека). Хотя я ожидал , что this сработает так же как и в строке " this._featureAction1() ; // как и ожидалось ..." , т.е. просто будет вызван как Собственый метод this.функция из тела Конструктора. Почему же при вызове из тел функций прототипа работает иначе, чем из тела Конструктора ? |
Цитата:
В js значение 'this' меняется динамически и зависит от контекста вызова (от того, каким образом вызывается функция). Вам нужно просто почитать про это. |
Цитата:
Гдк сказано , что значением this в теле метода прототипа будет прототип ? |
Цитата:
|
А ну где читал , там не обращено внимание видно на то, что this в теле вызываемой функции укажет на "все, что стоит перед вызовом"
т.е. я подумал, что this внутри будет равен (this) : (this).constructor.prototype._featureAction1() а он на самом деле равен (this.constructor.prototype) : (this.constructor.prototype)._featureAction1() |
Цитата:
И, кстати, не зависимо от того, есть ли у Вас собственный метод this._featureAction1 - всё равно будет зацикливанием (в этом случае this будет указывать на объект "с", но вызываться будет снова этот метод из прототипа). |
Может кто-нибудь понятно объяснить, что называют
- контекстом функции ; - объектом переменных функции (VO) ; - [[scope]] функции ? Например для функции верхнего уровня F: var I ; function F() { var i;} ; Говоря "контекст функции F" имеют ввиду глобальный код , в котором находится функция F с переменной I или же - ее внутренний код с переменной i ? Говоря "[[scope]] функции F" - аналогичный вопрос, что имеют ввиду ?. Говоря "VO функции F" - аналогичный вопрос , что имеют ввиду ? Мне кажется , что порой эти понятия путаются (у меня в голове так точно, чтение стандарта не помогло ) ... |
Часовой пояс GMT +3, время: 14:17. |