метод concat в конструкторах на прототипе Array

107
18 мая 2021, 05:40

Не понимаю поведение метода concat в конструкторах на прототипе Array; это БАГ или что ( ?

пример:

/* 1.  
   создали конструктор на прототипе Array.  
*/   
var MyArray = function(){} 
    MyArray.prototype = new Array();  
/* 2. 
   объявляю переменную "myarr" и присваиваю ей свойства конструктора "MyArray()" через оператор "new"; 
*/ 
var myarr = new MyArray(); 
/* 2.p.s. 
   т.к. конструктор MyArray() является наследником всех свойств конструктора Array() через свойство "prototype", ожидаю что унаследованы методы будут вести себя (правильно) 
*/ 
/* 3. 
 используя метод "push" добавил пару значений 
*/ 
 myarr.push(2,3); 
/* 4. 
 а вот метод concat ведёт себя не естественно 
   4.1 
 вместо того, чтобы создавать новый массив Array из заданных участков, он создает массив Array с ссылками на свойства переменой "myarr" 
*/ 
var myarr_c = myarr.concat(myarr);  
  myarr.push("A"); 
console.log(myarr_c); 
 
/* пример на простом Array */ 
//2. 
var arr = []; 
//3. 
   arr.push(0,1); 
//4.  
var arr_c = arr.concat(arr); 
   arr.push("A"); 
console.log(arr_c);	

Как понимать такое поведении конструктора "MyArray" ?

Answer 1

Вот что происходит:

var o = { prop: "value" }; 
var push = [].push; 
var concat = [].concat; 
push.call(o, 123); 
console.log(o); 
console.log(concat.call(o, [1,2,3]));

myarr получил методы массива, но массивом не является. Выведите typeof myarr.

READ ALSO
Проблема с textContent [дубликат]

Проблема с textContent [дубликат]

Почему при клике на button, textContent у $alertApp появляется и тут же исчезает?

283
Элементы списка разными цветами с помощью :nth-child()

Элементы списка разными цветами с помощью :nth-child()

Ребята, я новичок и пытаюсь изучать cssСейчас изучаю селектор nth-child

99
Как сделать свой livetemplate css webstorm?

Как сделать свой livetemplate css webstorm?

Вот задачка: w115 превратить в width: 1

115