为什么我不能在 JavaScript 中使用 "x = $(" p ").offset; Top = x().top"?



我正在使用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

最新更新