如何访问调用函数的内容?

时间:2013-08-01 14:58:37

标签: javascript jquery

我假设$('thing1')document.getElementById('thing1')将返回代表<div id="thing1"></div>的节点或对象但是如何在myFunc()中访问该节点或对象?

HTML:

<div id="thing1"></div>

JS:

var foo = $('#thing1').myFunc();

var myFunc = function() {
    console.log(this);         // I want to log $('#thing1')
}

我试图弄清楚各种api的工作方式,例如以高等图表为例,他们做了类似的事情:

$('#dailyKPIChart').highcharts({
    chart: {
        zoomType: 'x',
        spacingRight: 20
    }
});

图表将加载$('#dailyKPIChart')

这是如何运作的?

2 个答案:

答案 0 :(得分:3)

无法(以编程方式)知道使用哪个变量(或哪个函数调用)来获取调用方法的对象。

调试器将告诉您(设置断点,然后查看堆栈)但如果您认为需要知道代码中的名称,这将无用。

$a_jquery_object.selector将(在旧版本的jQuery中)保存用于构造jQuery对象的选择器,这可能对您的特定示例有所帮助。


  

图表将加载$('#dailyKPIChart')

     

这是如何运作的?

它不需要了解$()'#dailyKPIChart',它只需要您在调用它时获得的对象,该对象可通过this获得,您的早期示例代码已经使用了。

答案 1 :(得分:2)

有几种方法可以在javascript中调用一个函数,也许你在call(或它的堂兄apply)之后:

假设您将您的功能定义为:

var myFunc = function() {
    console.log(this);         // I want to log $('#thing1')
}

您可以在指定context的同时调用它。例如,您可以这样做:

var foo = $('#thing1');

var myFunc = function() {
    console.log(this);      
}
myFunc.apply(foo);

或通过call

var foo = $('#thing1');

var myFunc = function() {
    console.log(this);      
}
myFunc.call(foo);

如果要传递参数,可以通过指定参数列表或参数数组来实现。例如:

var foo = $('#thing1');


var myFunc = function(one, two) {
    console.log(one);
    console.log(two);
    console.log(this);         
}
myFunc.apply(foo,[2,3]); 

或致电:

myFunc.apply(foo,2,3); //foo is the calling context

Fiddle