zepto-1.2.0.js的zepto对象是类数组还是对象?

发布于 2022-09-04 20:46:34 字数 370 浏览 21 评论 0

源码里面$(selector)最后返回的是new Z(dom, selector),既然是new一个函数,那结果就应该是个对象啊,我也用Array.isArray(img)Object.prototype.toString.call(img)判断了一下,确实不是数组,但是在控制台里面为什么显示的zepto对象是个数组形式呢?

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

忆依然 2022-09-11 20:46:34

经测试, 如果一个对象A上或者其原型链上存在lengthsplice这两个属性, 并且typeof A.length === 'number' && typeof A.splice === 'function'为真, 则在ChromeDevTools里面打印出来会和数组类似. 这应该是ChromeDevTools的一个黑科技吧? 我在Console的相关标准里面没有看到有这一节.

比如:

const A = {length: 2, splice: function() { return [1, 2]} }
// [undefined × 2] (在Chrome调试器里面会打印这样的结果)
console.log(A)
// [] (这一行是console.log输出的)
// undefined (这一行是console.log的返回值)

Zepto 1.2.0里面$.prototype恰好实现了这两个属性:

https://github.com/madrobby/z...

// ...
$.fn = {
  // ...
  length: 0,
  // ...
  splice: emptyArray.splice,
  // ...
}
// ...
若沐 2022-09-11 20:46:34

图片描述

刚又试了一下,确实加上这个splice方法就能输出数组形式了,内部还是用.call的形式去调了数组上的方法

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文