ООП, 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, время: 19:04. |