我正在使用jQuery,需要获取一个元素的位置。
我先写了这样的代码:
x=$("p").offset;
Top = x().top; // bug here
我发现浏览器找不到顶部,因为这里的x((为null。
所以我把它改写成这样:
x=$("p").offset;
y=$("p").offset();
Top = y.top;
好的,现在它工作了。
但为什么???我认为y.top应该和x((.top一样,因为x((是$("p"(.offset((.
下面是一个示例
function P() {
this.pos = {top: 1, left: 1}
}
P.prototype.offset = function() {
return this.pos
}
const p = new P()
console.info('p.offset().top:', p.offset().top)
const fn = function() {
return this.pos // won't work when called normally, ie fn()
}
console.info('fn.call(p).top:', fn.call(p).top) // works
const x = p.offset // x is equivalent to fn
console.info('x.call(p).top:', x.call(p).top)
console.info('x().top:', x().top) // doesn't work
最后一个错误是因为方法offset
(现在分配给x
(没有this
上下文供return this.pos
工作。
这就是this
在该调用中未定义的原因。
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call