我可以制作本地的“this”吗?在另一个函数中可用
Can I make the local "this" available inside another function?
我有这个函数编码:
var Dom = function () {
this.getX = function (element, value) {
...
}
this.checkX = function (label, expectedCount, params) {
it(label + ': Check for ' + expectedCount, function () {
for (var i = 0; i < params.length; ++i) {
this.getX.apply(this, params[i]).click();
}
});
}
它给了我一个未定义的getX。我怎样才能使getX在checkX函数内工作?
有几种方法可以改变this
在函数中的引用,或者保留对外部this
的访问权。然而,我们应该注意到您的问题不在于checkX
,而在于 checkX
中的匿名函数,因此您需要将这些技术之一应用于该函数。
在变量中存储this
的引用:
var Dom = function() {
var self = this;
this.getX = function(element, value) {
...
}
this.checkX = function (label, expectedCount, params) {
it(label + ': Check for ' + expectedCount, function () {
for (var i = 0; i < params.length; ++i) {
self.getX.apply(self, params[i]).click();
}
});
}
}
或者使用Function.prototype.bind(感谢elclrs在评论中提到这一点):
var Dom = function() {
this.getX = function(element, value) {
...
};
this.checkX = function (label, expectedCount, params) {
it(label + ': Check for ' + expectedCount, (function () {
for (var i = 0; i < params.length; ++i) {
this.getX.apply(this, params[i]).click();
}
}).bind(this));
}
}
. .或者,使用Function.prototype.call。这种技术在您的场景中不起作用,因为您无法控制何时调用匿名函数,但通常了解它是有用的。
var Dom = function() {
this.getX = function(element, value) {
...
};
this.checkX = function (label, expectedCount, params) {
...
}
// when calling checkX later..
this.checkX.call(this, argument1, argument2, argument3);
}
许多JavaScript库包含实用程序,可以轻松处理this
引用的内容,因为回调函数在大多数JS应用程序中非常常见。例如,参见dojo.hitch
或jQuery的$.proxy
。您可以轻松地编写自己的函数来做同样的事情:
function WrapCallbackWithContext(context, callback) {
return function() {
return callback.apply(context, arguments);
}
}
尝试在不同的变量中保留作用域:
var Dom = function () {
var self = this;
this.getX = function ( element, value ) {
...
}
this.checkX = function ( label, expectedCount, params ) {
...
self.getX.apply( self, params[ i ] ).click();
...
}
}
var self = this;
在self
变量中保留了DOM
函数的作用域。当您进入一个内部函数时,您仍然可以访问self
变量,因此仍然可以访问原始作用域。
似乎您的it
函数正在调用callback
函数,callback
内部this
将不会引用您的外部函数
var Dom = function () {
this.getX = function (element, value) {
...
}
var _this = this;
this.checkX = function (label, expectedCount, params) {
it(label + ': Check for ' + expectedCount, function () {
for (var i = 0; i < params.length; ++i) {
_this.getX.apply(this, params[i]).click();
}
});
}
}
相关文章:
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- 使用JS函数来使用另一个函数的语法?node.js
- 嵌套到另一个函数中的Fancybox函数;不起作用
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- 如何在不预定义的情况下将javascript函数传递到另一个函数中
- 从另一个函数获得$this值
- 如何记录调用另一个函数的函数的返回值
- 它在另一个函数中嵌套后不会输出文本
- 如何将自动完成的值传递到另一个函数中
- 将一个函数作为参数传递给javascript中的另一个函数
- 从另一个函数延迟解析的返回
- Javascript:OnChange事件,将数组变量传递给另一个函数
- 通过引用Javascript中的另一个函数来传递对象方法
- 将变量值传递给另一个函数
- 运行“;非“;单击另一个函数中的函数仅一次
- 用javascript将参数从一个函数传递到另一个函数
- 如何在另一个函数完成后运行