Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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_Jquery_Jquery Ui - Fatal编程技术网

Javascript 对象范围内的变量访问

Javascript 对象范围内的变量访问,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,如何访问“runit”和“property2”的值 您无法从stop()访问runit,因为它的作用域仅限于start()方法。您应该能够使用访问属性2 this.property2 您可以将runit添加到对象的属性中,例如 { property1: "myvalue", property2: "myvalue", property3: "myvalue", runit: null, start: function() { th

如何访问“runit”和“property2”的值


您无法从
stop()
访问
runit
,因为它的作用域仅限于
start()
方法。您应该能够使用访问
属性2

this.property2
您可以将
runit
添加到对象的属性中,例如

{
    property1: "myvalue",
    property2: "myvalue",
    property3: "myvalue",
    runit:     null,
    start: function() {
        this.runit = 'one value';
    },
    stop: function(){
        console.log(this.runit);
        console.log(this.property2);
    }
}

一个可能的工作示例-

您无法从
stop()
访问
runit
,因为它的作用域仅限于
start()
方法。您应该能够使用访问
属性2

this.property2
您可以将
runit
添加到对象的属性中,例如

{
    property1: "myvalue",
    property2: "myvalue",
    property3: "myvalue",
    runit:     null,
    start: function() {
        this.runit = 'one value';
    },
    stop: function(){
        console.log(this.runit);
        console.log(this.property2);
    }
}

一个可能的工作示例-

为了访问
运行它
,您需要在对象范围之外定义它:

var runit;

$("#selector").draggable({
    property1: "myvalue",
    property2: "myvalue",
    property3: "myvalue",
    start: function() {
        runit = 'one value';
    },
    stop: function(){                       
        //Access Value of runit
        console.log(runit);
        //Acess Value of property2
        console.log(this.property2);
    }
});

property2
应该可以通过
this.property2
访问,但这取决于如何在内部调用stop方法。

要访问
运行它
,需要在对象范围之外定义它:

var runit;

$("#selector").draggable({
    property1: "myvalue",
    property2: "myvalue",
    property3: "myvalue",
    start: function() {
        runit = 'one value';
    },
    stop: function(){                       
        //Access Value of runit
        console.log(runit);
        //Acess Value of property2
        console.log(this.property2);
    }
});

property2
应该可以通过
this.property2
访问,但这取决于如何在内部调用stop方法。

另一个选项是只返回
运行它。我的意思是,这完全取决于你想要完成什么:

start: function() {
    var runit = 'one value';
    // Stuff
    return { runit: runit };
},
method: function(){
    var foo = this.start().runit;
}

另一个选项是只返回
运行它
。我的意思是,这完全取决于你想要完成什么:

start: function() {
    var runit = 'one value';
    // Stuff
    return { runit: runit };
},
method: function(){
    var foo = this.start().runit;
}

如果在没有
var
的情况下声明runit,则可以访问它。那么它将是全局的。@bhamlin干杯,我已经澄清了我的答案虽然您应该能够在start和stop方法中访问对象的范围,但这不是一个安全的假设。这取决于内部如何称呼他们。这个答案不准确;thisBinding(几乎)完全依赖于方法的调用方式,而您的解决方案肯定不能保证在一般情况下,也不能保证在jQueryUI的可拖动事件处理程序的特定情况下进行适当的绑定。我发现,这种特定的jQuery习惯非常有用,而且一点也不令人讨厌。在任何情况下,我都愿意详细说明:
var-obj={foo:42,bar:function(){alert(this.foo);}},fn=obj.bar;fn()
您应该会收到
42
的警报,请注意,该警报失败,我没有使用
.call()
。如果您在没有
var
的情况下声明runit,则可以访问它。那么它将是全局的。@bhamlin干杯,我已经澄清了我的答案虽然您应该能够在start和stop方法中访问对象的范围,但这不是一个安全的假设。这取决于内部如何称呼他们。这个答案不准确;thisBinding(几乎)完全依赖于方法的调用方式,而您的解决方案肯定不能保证在一般情况下,也不能保证在jQueryUI的可拖动事件处理程序的特定情况下进行适当的绑定。我发现,这种特定的jQuery习惯非常有用,而且一点也不令人讨厌。在任何情况下,我都愿意详细说明:
var-obj={foo:42,bar:function(){alert(this.foo);}},fn=obj.bar;fn()
您应该期望出现
42
的警报,请注意,该警报失败,我没有使用
.call()
。您是指“对象的范围”,因为(在js中)没有对象范围。您是指“对象的范围”,因为(在js中)没有对象范围。