ООП, this, приватные методы, я не понимаю. Помогите!
Добрый день, уважаемые знатоки.
Я изучаю ООП в javascript и сегодня мое сознание терзает один вопрос:help: . Как я читал в учебниках и интернете при вызове функции - конструктора (new Class(par)) инициализируется новый объект и на него ставится указатель this. Все верно, и с учетом замыканий, я предполагал, что любое упоминание слова this это указатель на создаваемый объект, но в приватных методах это не получается. Вот код: function Class(){ var curThis = this; this.publickMethod = function(){ console.log(this); privateMethod(); }; function privateMethod(){ console.log(curThis); console.log(this); }; }; var a = new Class(); a.publickMethod();Я ожидал увидеть в консоли три объекта одного класса, но :-? на практике последний объект window. Пожалуйста разъясните мне, выходит не любое this в конструкторе это новый объект? Заранее спасибо! :thanks: UPD и еще вопрос на закуску: Можно ли при наследовании определять свойства родительского класса таким образом: function A(name){ this.getName = function(){console.log(name)}; }; function B(name){ this = new A(name); ...... }Вроде не получается. Почему? |
Цитата:
http://javascript.ru/tutorial/object/thiskeyword |
Цитата:
function Test(Name) { this.getName = function(Name){alert(Name)}; }; var a = new Test(); a.getName('Text'); |
Цитата:
Выходит, что this не поддается замыканию? А на счет второго вопроса : я сам понял. В this нельзя что-то присвоить, можно только обернуть (Class.call(this,...)). Верно? ksa, да я перепутал свойство и метод, но суть была в другом. |
Цитата:
Цитата:
Цитата:
Так хоть будет понятней про что ты спрашиваешь... ;) |
Цитата:
Вот, почитай: http://dmitrysoshnikov.com/ecmascrip...hapter-3-this/ |
function Class(){ var curThis = this; this.publickMethod = function(){ console.log(this); privateMethod.apply(this, arguments); }; function privateMethod(){ console.log(curThis); console.log(this); }; }; var a = new Class(); a.publickMethod(); |
Всем спасибо. Теперь я знаю ответы на свои вопросы.
1: this не поддается замыканию. 2: this'у нельзя ничего присвоить. |
При вызове функции можно явно указать this используя call или apply.
|
Часовой пояс GMT +3, время: 09:25. |