2016-05-27 3 views
0

Мой вопрос довольно прямо вперед, но я не могу найти ответ в любом месте (возможно, мой поиск терминологии не правильно, но здесь идет) ...магазин прототип функции в переменной

Почему я можно сделать следующее:

var _Class = function(){ 
    this.output = "Hello"; 
} 

var Class = new _Class(); 

Class.Talk = function(){ 
    console.log(this.output); 
} 
Class.Talk(); // outputs "Hello" 

И это:

var func = function(){ 
    console.log(Class.output); 
} 
func(); // outputs "Hello" 

Однако я не могу сделать:

var _Class = function(){ 
    this.output = "Hello"; 
} 

var Class = new _Class(); 

Class.Talk = function(){ 
    console.log(this.output); 
} 

var func = Class.Talk; 
func(); // undefined 

Я думал, что это предназначено для хранения ссылки на оригинальную функцию?

+0

'Class.talk' будет существовать только для этого экземпляра. используйте '_Class.prototype. $ x', чтобы получить его для всех экземпляров' _Class' –

+1

Что вы ожидаете от 'this', чтобы ссылаться на' func() '? Кажется, вы должны прочитать https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this. –

+0

Вы ждали этого huh @self! – JordanHendrix

ответ

1

Если вы делаете func.apply(Class), это будет работать, потому что вы говорите ему, что используете контекст Class. Контекст тела функции при выполнении задания - window, поэтому вы видите undefined

+1

Но 'Class.Talk' должен записывать что-то на консоль, а не' undefined'. –

+0

См. Мое редактирование, я пропустил вопрос. Было бы признательно, что забрал голос –

+0

Это очень интересное решение, о котором я не знал, что вы можете это сделать! – Zze

Смежные вопросы