Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以做本地的吗;这";在另一个函数中可用吗?_Javascript - Fatal编程技术网

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
,而在于anon
checkX
中的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
,以防有人在不过,这是谷歌提供的,谢谢!非常罕见的是
这个
指的是函数本身,所以我怀疑
这个
指的是
回调