-4

我假设$('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 的工作原理,以 highcharts 为例,他们做这样的事情:

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

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

这是如何运作的?

4

2 回答 2

3

没有办法(以编程方式)知道哪个变量(或哪个函数调用)用于获取调用方法的对象。

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

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


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

这是如何运作的?

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

于 2013-08-01T14:59:38.740 回答
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

小提琴

于 2013-08-01T15:12:54.503 回答