我的javascript类定义如下:
function C_page() {
this.errors = [];
function void_log_str(L_message) {
this.errors.push(L_message);
}
//and more code...
}
问题是void_log_str范围用作此方法。有没有办法去顶级呢?
答案 0 :(得分:0)
function C_page() {
this.errors = [];
var that = this;
function void_log_str(L_message) {
that.errors.push(L_message);
}
//and more code...
}
我会做那样的事。
答案 1 :(得分:0)
您可以使用范围 " var _this = this;"然后在函数体中引用_this。 或者你可以"绑定"对此的功能,例如使用Function.prototype.bind(如果您的浏览器没有这个,则使用polyfill)
答案 2 :(得分:0)
每次调用函数时,您都可以使用call()
或apply()
来选择您希望this
拥有的值;
function C_page() {
this.errors = [];
function void_log_str(L_message) {
this.errors.push(L_message);
}
void_log_str.call(this, "value_of_l_message");
}
...或者您可以使用bind()
强制实现此值(这样做的好处就是您在定义中执行此操作,而不是在调用中执行此操作);
function C_page() {
this.errors = [];
var void_log_str = function(L_message) {
this.errors.push(L_message);
}.bind(this);
void_log_str("value of l message");
//and more code...
}
...或者您可以使用var that = this
方法;
function C_page() {
var that = this;
this.errors = [];
function void_log_str(L_message) {
that.errors.push(L_message);
}
void_log_str("value of l message");
//and more code...
}
答案 3 :(得分:0)
这将有效:
function C_page() {
var context = this;
this.errors = [];
function void_log_str(L_message) {
context.errors.push(L_message);
}
//and more code...
}
答案 4 :(得分:0)
不要使用根据函数调用方式而改变的this
context,而是使用直接引用数组的作用域中的变量:
function C_page() {
var errors = this.errors = [];
function void_log_str(L_message) {
errors.push(L_message);
}
//and more code...
}
您也可以使用bind
:
function C_page() {
this.errors = [];
var int_log_str = Array.prototype.push.bind(this.errors);
//and more code...
}
另请参阅How to access the correct `this` context inside a callback?了解处理this
的更多方法。