我有一个包含一些公共方法和一些私有方法的类。公共方法必然会被这个"这个"私有方法使用" var"。
我称之为公共方法" do()"来自课外,有"这个"评估为" MyClass"。但是,如果我进一步打电话给私人"某事()"方法,那么"这个"评估全局命名空间" Window&#34 ;;
function MyClass() {
// private field
var keys = ["foo", "bar"];
// public method
this.method = function(key) {
alert(key);
}
// private method
var something = function() {
console.log("something()");
console.log(this);
$.each(keys, function(idx, key){
this.method(key);
}.bind(this));
}
// public method
this.do = function() {
console.log("do()");
console.log(this);
something();
}
}
var test = new MyClass();
test.do();
以上代码作为小提琴:https://jsfiddle.net/lilalinux/13m242ce/8/
据我了解,this.do(在构造函数内部分配)是一个特权"函数,因此应该可以从类外部调用,并允许访问私有成员(这是构造函数的变量和参数)。
答案 0 :(得分:1)
由于something
未与MyClass
直接关联,因此其this
值不会引用您的MyClass
实例。您应该做的是在this
之外指定something
的引用,并在您的私有函数中引用该变量。
这样的事情:
function MyClass() {
var self = this; // <-- keep the reference
// ...
// private method
var something = function() {
console.log("something()");
console.log(self);
$.each(keys, function(idx, key){
self.method(key);
}.bind(self));
}
// ...
}