![](/img/trans.png)
[英]Javascript Is it possible to create a prototype Array of particular object?
[英]javascript object with array prototype
最近,我阅读了一篇包含以下内容的文章
var obj = {};
Array.prototype.push.call(obj, 'aaa', 'bbb', 'ccc');
console.log(obj);
{0: "aaa", 1: "bbb", 2: "ccc", length: 3}
我知道它尝试使用obj作为上下文,并将其余的作为参数传递。 在此之前,我只用于将每个项目压入数组。 我很好奇此实现背后的逻辑是什么。 如何将index设置为值的每个键,以及为什么还会将'length'自动添加到对象? 谢谢
因为这就是push
方式 。 大多数数组方法是有意通用的,因此它们可以应用于其他对象,而不仅是数组。
当使用零个或多个参数item1,item2等调用push方法时,将执行以下步骤:
- 令O为调用ToObject并将
this
值作为参数传递的结果。
这只是确保this
是一个对象: var O = Object(this);
- 令lenVal为使用参数“ length”调用O的[[Get]]内部方法的结果。
var lenVal = O.length;
。 在本例中, lenVal
将是undefined
,因为该对象没有length
属性。
- 令n为ToUint32 ( lenVal )。
将lenVal
转换为数字并将结果分配给n
。 undefined
将转换为0
。
- 让item为内部List,其元素按从左到右的顺序是传递给此函数调用的参数。
基本上var items = arguments;
。
- 重复,但项目不为空
- 从项目中删除第一个元素,并让E为元素的值。
- 使用参数ToString ( n ), E和
true
调用O的[[Put]]内部方法。- n增加1。
这将简单地遍历items
所有条目,分配O[String(n)] = E;
和n += 1
。 这是您传递给push的每个参数都分配给该对象的地方!
- 用参数“ length”, n和
true
调用O的[[Put]]内部方法。
将length
设置为n
: O.length = n;
。 这是设置length
地方!
- 返回n 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.