我在javascript类中创建私有变量时正在阅读Douglas Crawford's piece。
在其中他说你必须陈述that = this
以“使对象可用于私人方法”。但是,我能够构建一个具有私有成员,私有方法和公共方法的示例,而无需定义that = this
:
function Form(id_code) {
//private variable
var id_code = id_code;
var color = '#ccc';
//private method
function build_style_attribute() {
return 'style="background-color:'+color+'"';
}
//public method
this.render = function() {
return '<div '+build_style_attribute()+'>'+id_code+'</div>';
}
}
var formModules = new Form('modules');
$('p#test').html(formModules.render());
指定that = this
的内容允许我执行此示例尚未执行的操作?
感谢@Gaby,所以我理解这一点:正如上面的示例所示,我可以在不使用that=this
的情况下访问私有变量,但它确实让我可以访问 public 变量如下所示:
function Form(id_code) {
that = this;
//private variable
var id_code = id_code;
var color = '#ccc';
//public variable
this.weight = 'bold';
//private method
function build_style_attribute() {
//this will not work with either "weight" or "this.weight"
return 'style="background-color:'+color+'; font-weight:'+that.weight+'"';
}
//public method
this.render = function() {
return '<div '+build_style_attribute()+'>'+id_code+'</div>';
}
}
var formModules = new Form('modules');
$('p#test').html(formModules.render());
答案 0 :(得分:6)
通过惯例,我们创建一个 的私有 变量。这是用来制作的 对象可用于私有 方法即可。
这是一种解决方法 ECMAScript语言中的错误 导致这种情况的规范 内部功能设置不正确 。
function Test() {
var that = this;
function wrongprivate(){
return this;
}
function rightprivate(){
return that;
}
this.check= function (){
console.log( wrongprivate() );
console.log( rightprivate() );
}
}
var test= new Test();
test.check();
// will output
// window
// object{}
答案 1 :(得分:0)
不使用'那'你也可以实现这个:
function someFunction(){
var that = this;
function getThis(){
return this;
};
function getThat(){
return that;
};
return{
getThis:getThis,
getThat:getThat
}
}
var a = new someFunction();
alert(a.getThis()); // Object
alert(a.getThat()); // Object