Javascript 我可以做本地的吗;这";在另一个函数中可用吗?
我将此函数编码为:Javascript 我可以做本地的吗;这";在另一个函数中可用吗?,javascript,Javascript,我将此函数编码为: var Dom = function () { this.getX = function (element, value) { ... } this.checkX = function (label, expectedCount, params) { it(label + ': Check for ' + expectedCount, function () { for (var i = 0
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();
}
});
}
var Dom=function(){
this.getX=函数(元素、值){
...
}
this.checkX=函数(标签、预期计数、参数){
it(标签+):检查“+expectedCount,函数(){
对于(变量i=0;i
它为我提供了一个未定义的getX。如何使getX在checkX函数中工作?有几种方法可以更改函数中此所指的内容,或者以其他方式保留对外部此的访问。但是,我们应该注意,您的问题不在于
checkX
,而在于anoncheckX
中的myous函数,因此您需要将这些技术之一应用于该函数
在变量中存储对该的引用:
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();
}
});
}
}
var Dom = function () {
var self = this;
this.getX = function ( element, value ) {
...
}
this.checkX = function ( label, expectedCount, params ) {
...
self.getX.apply( self, params[ i ] ).click();
...
}
}
许多JavaScript库都包含一些实用程序,可以轻松处理此所指的内容,因为回调函数在大多数JS应用程序中非常常见。例如,see或jQuery。您可以轻松编写自己的函数来执行相同的操作:
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) {
it(label + ': Check for ' + expectedCount, function () {
for (var i = 0; i < params.length; ++i) {
self.getX.apply(self, params[i]).click();
}
});
}
}
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;
将DOM
函数的作用域保留在self
变量中。当您进入其中一个内部函数时,您仍然可以访问self
变量,因此仍然可以访问原始作用域。您的It
函数似乎正在调用 回调
函数和内部回调此
不会引用外部函数
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();
}
});
}
}
var Dom=function(){
this.getX=函数(元素、值){
...
}
var_this=这个;
this.checkX=函数(标签、预期计数、参数){
it(标签+):检查“+expectedCount,函数(){
对于(变量i=0;i
请看这里的注释:对我来说,它看起来像摩卡咖啡的it()
,但你使用它的方式对我来说真的很奇怪。也许它不是摩卡咖啡,但如果是,你应该检查你是否真的正确使用它。我认为它也应该是。apply(self
而不是。apply(此
.OP由于内部闭包而出现问题。在您的示例中,您是如何编写它的,您不需要它,此
将引用此内的实例。检查x
。当您引入另一个作用域时,问题就出现了。@elclanrs完全正确-我只是出于这个原因提交了一个编辑。oooooo…我多么讨厌这一点=此
…我发现它会引起很多不必要的混淆…为什么您会将当前的“实例”称为“that”就其本身而言?依我看,self
是这个
@Lix唯一明智的选择,这可能是一个更好的选择。我自己几乎从未使用过这个成语,我更喜欢用其他方式绑定这个
,所以我只是使用了我想到的第一件事。我会继续使用self
,以防有人在不过,这是谷歌提供的,谢谢!非常罕见的是这个
指的是函数本身,所以我怀疑这个
指的是回调
。