Javascript:调用";公共变量;从「;“私人方法”;

Javascript:调用";公共变量;从「;“私人方法”;,javascript,class,Javascript,Class,当用户单击从我的一个类调用函数的按钮时,我需要调用一些私有变量 这是我的密码:- class01 = new MyClass('Tom Marvolo Riddle'); function MyClass(name){ this.name = name; var draw = function(){ var newHTML ='<input type="button" value="hello" />'; $(".ctn").ap

当用户单击从我的一个类调用函数的按钮时,我需要调用一些私有变量

这是我的密码:-

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();

}
class01=新MyClass('Tom Marvolo Riddle');
函数MyClass(名称){
this.name=名称;
var draw=function(){
var newHTML='';
$(“.ctn”).append(函数(){
返回$(newHTML)。单击(hello);
});
}
var hello=function(){
警报('你好,我的名字是'+this.name+'.'))
}
draw();
}

hello
函数中,当调用该函数时,
指的是单击的按钮,它将不具有我们存储的
名称
属性。因此,我们在另一个变量中分配
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');

由于引入了新的作用域,您失去了上下文。缓存
this
例如:
var self=this
然后使用
self
。或者,尝试
var hello=function(){alert('hello,我的名字是“+this.name+”);}.bind(this)-bind保留上下文。@BenjaminGruenbaum作为答案发布?我最喜欢@BenjaminGruenbaum的答案,它不需要声明任何变量。非常感谢。