>  기사  >  웹 프론트엔드  >  Array.prototype.concat은 [Translation]_javascript 기술을 반박하는 보편적인 방법이 아닙니다.

Array.prototype.concat은 [Translation]_javascript 기술을 반박하는 보편적인 방법이 아닙니다.

WBOY
WBOY원래의
2016-05-16 17:49:541206검색

ECMAScript 5.1 사양§15.4.4.4 내용:

코드 복사 코드는 다음과 같습니다.

concat 함수는 의도적으로 범용적으로 설계되었습니다. 따라서 이 값이 반드시 Array 객체일 필요는 없습니다. 따라서 다른 유형의 객체로 전송하여 메서드로 호출할 수 있습니다.


이 문서의 코드는 모두 []를 Array.prototype에 대한 바로가기로 사용합니다. 이는 이미 매우 일반적인 기술이지만 가독성은 낮습니다. 객체 인스턴스를 통해 액세스합니다. Array.prototype의 메소드 그러나 이 액세스 메소드는 최신 JavaScript 엔진에서 너무 빠르기 때문에 이러한 JavaScript 엔진이 더 이상 이 호출 메소드에서 배열 인스턴스를 생성하지 못할 수도 있습니다. 이 기사의 모든 예제는 Firefox 및 V8에서 시도되었습니다.

concat이 범용 메서드인지 살펴보겠습니다. 범용 메서드라면 this의 값이 실제 배열인지 또는 배열과 유사한 객체(길이가 있는)인지는 중요하지 않습니다. 속성을 가지며 인덱스로 각 요소에 액세스할 수 있으므로 메서드의 반환 결과는 먼저 배열에서 concat 메서드를 호출하려고 시도합니다.

코드 복사 코드는 다음과 같습니다.

> ["hello"].concat(["world"])
["hello " , "world"]

> [].concat.call(["hello"], ["world"]) // 위와 동일
["hello", "world" ]


그런 다음 배열과 유사한 객체를 사용하여 위의 연결 작업을 수행합니다.
복사합니다. 코드 코드는 다음과 같습니다:

> [].concat.call({ 0: "hello", length: 1 }, ["world" ])
[ { '0': 'hello', length: 1 }, 'world' ]

특수 변수 인수도 배열과 유사한 객체입니다. 예상했던 것:

코드 복사 코드는 다음과 같습니다.

> function f() { return [].concat .call(arguments, ["world"]) }
> f("hello")
[ { '0': 'hello' }, 'world' ]


실제 범용 메서드는 다음과 같아야 합니다 Array.prototype.push:
코드 복사 코드는 다음과 같습니다.

> var arrayLike = { 0: "hello", 길이: 1 }; "world")
2
> arrayLike
{ '0': 'hello', '1': 'world', 길이: 2 }


번역자 주: 브라우저는 표준에 따라서만 구현하므로 버그 문제는 없습니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.