请帮我弄清楚 Array concat() 方法并编写纯 Javascript 代码
Posted
技术标签:
【中文标题】请帮我弄清楚 Array concat() 方法并编写纯 Javascript 代码【英文标题】:Please help me to figure out Array concat() method and write pure Javascript code 【发布时间】:2019-08-15 13:15:33 【问题描述】:。 这是ECMA-262标准的代码
-
让 O 成为? ToObject(此值)。
让 A 成为? ArraySpeciesCreate(O, 0)。
设 n 为 0。
让 items 是一个 List,其第一个元素为 O,其后续元素
是,按从左到右的顺序,
传递给此函数调用的参数。
重复,但项目不为空
一个。从 items 中删除第一个元素,并让 E 成为元素的值。
b.让可传播的吗? IsConcatSpreadable(E)。
c。如果spreadable为真,那么
i. Let k be 0.
ii. Let len be ? ToLength(? Get(E, "length" "length")).
iii. If n + len > 253-1, throw a TypeError exception.
iv. Repeat, while k < len
1. Let P be ! ToString(k).
2. Let exists be ? HasProperty(E, P).
3. If exists is true, then
a. Let subElement be ? Get(E, P).
b. Perform ? CreateDataPropertyOrThrow(A, ! ToString(n), subElement).
4. Increase n by 1.
5. Increase k by 1.
d。否则 E 将作为单个项目添加而不是展开,
i. If n≥253-1, throw a TypeError exception.
ii. Perform ? CreateDataPropertyOrThrow(A, ! ToString(n), E).
iii. Increase n by 1.
执行? Set(A, "length" "length", n, true)。
返回 A。
我想要这样的代码。
Array.prototype.con = function()
let 0 = ;
let A = ;
let n = 0;
let item = ;
so on...
让 arr1 = [1,2];
让 arr2 = [3,4];
arr1.con(arr2) //像concat()一样接收效果
【问题讨论】:
我不明白你的问题 我想创建我自己的方法,它会像 concat() 方法一样工作,我也想了解 concat() 方法在标准下是如何工作的。 您似乎拥有 ECMA-262 标准的所有步骤。尝试将这些转换为代码,看看会发生什么。 DTul 请帮我转换一下。 @Vigen *** 不是人们只为您编写代码的地方。自己尝试一下,如果遇到问题,请提出具体问题。 How to ask 【参考方案1】:关于您在 cmets 中的问题。您可以通过在原型函数中调用 this
来访问项目。它指的是您正在调用的实际实例。
items = this;
Array.prototype.newTest = function(toBeAdded)
console.log('this', this);
console.log('To be Added', toBeAdded);
const arr = ['foo', 'bar'];
arr.newTest(['x','y']);
【讨论】:
以上是关于请帮我弄清楚 Array concat() 方法并编写纯 Javascript 代码的主要内容,如果未能解决你的问题,请参考以下文章