Javascript 对象范围内的变量访问
如何访问“runit”和“property2”的值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
您无法从
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中)没有对象范围。