我假设$('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')
这是如何运作的?
答案 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