2014-01-06 4 views
0

Мне нужно вызвать некоторую закрытую переменную, когда пользователь нажимает кнопку, вызывающую функцию из одного из моих классов.Javascript: вызов «pubilc Variable» из «private Method»

Вот мой код: -

class01 = new MyClass('Tom Marvolo Riddle'); 

function MyClass(name){ 

    this.name = name; 

    var draw = function(){ 
     var newHTML ='<input type="button" value="hello" />'; 
     $(".ctn").append(function(){ 
      return $(newHTML).click(hello); 
     }); 
    } 

    var hello = function(){ 
     alert ('hello, my name is '+this.name+'.') 
    } 

    draw(); 

} 
+4

Вы потеряли контекст, представив новую область. Cache 'this' eg:' var self = this', а затем использовать 'self'. – elclanrs

+3

В качестве альтернативы попробуйте 'var hello = function() {alert ('hello, мое имя' + this.name + '.'); } .bind (this); '- bind сохраняет контекст. –

+0

@BenjaminGruenbaum почта как ответ? –

ответ

1

В функции hello, когда она вызывается, this ссылается на кнопку нажала, которая не будет иметь атрибута name который мы сохраненные. Итак, мы фиксируем текущий объект при назначении name, в другой переменной, например,

function MyClass(name){ 

    var that = this; 
    that.name = name; 

    ... 
    var hello = function(){ 
     console.log ('hello, my name is ' + that.name + '.'); 
    } 
    draw(); 
} 

var class01 = new MyClass('Tom Marvolo Riddle');