2012-03-02 162 views
1

如何访问“runit”和“property2”的值?对象范围内的变量访问

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

回答

4

,因为它是唯一的作用范围是start()方法不能从stop()访问runit。您应该能够访问property2

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); 
    } 
} 

,可能为工作的例子 - http://jsfiddle.net/9rZJH/

+1

如果你声明没有'var',你可以访问runit。那么这将是全球性的。 – bhamlin 2012-03-02 00:15:02

+0

@bhamlin干杯,我已经澄清了我的回答 – Phil 2012-03-02 00:16:19

+0

虽然你应该**能够在启动和停止方法内访问对象的范围,但这不是一个安全的假设。这取决于他们如何在内部调用。 – David 2012-03-02 00:18:22

2

为了访问runit您需要在对象范围外定义它:

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是可访问的,但取决于如何停止方法在内部调用。

+1

您的意思是“对象的范围”,因为没有这样的东西(在JS中)作为对象范围。 – davin 2012-03-02 00:19:08

+0

@davin当然:) – David 2012-03-02 00:21:13

1

另一种选择是只返回runit。我的意思是,这一切都取决于你想完成什么:

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