2013-09-01 2 views
0
var primes=[2,3,5,7] 
primes.sync = function(){this[0]=23;} 

primes // => [2, 3, 5, 7] 

primes.sync() 

primes // => [23, 3, 5, 7] 

이것은 Chrome에서 완벽하게 작동하는 것 같습니다.배열에 함수 연결

이 구문/"기능"을 사용하지 않는 이유가 있습니까? 또한 primes을 정상 배열로 간주 할 수 있습니까 (예 : 배열을 필요로하는 함수에 전달할 때)?

내가 내 프로그램에서 peopleList이 말 : 나는 그것을 사용하려는 이유


이다. 응용 프로그램의 모든 기능은 배열처럼 그것을 사용합니다. 그런 다음 갑자기 서버에 POST를 수행합니다. 그런 다음 배열이 서버에 직접 쿼리하여 자체를 업데이트하려고합니다. 이것은 내 angular.js 애플 리케이션에서 아주 우아한 코드를 허용합니다.

답변

3

for-in을 사용하여 (잘못) 배열을 반복하려고하면 문제가 발생할 수 있습니다. for 문 또는 배열 반복기 메서드 중 하나를 사용하여 열거 형을 숫자 인덱스로 제한하면 아무 문제가 없어야합니다.

어레이는 일반적인 어레이처럼 계속 작동합니다.

+0

및 for-in 루프를 피해야합니다. 반환 된 키의 순서에 대한 보장은 없습니다. –

+0

@MattGreer : 동의 함. – user2736012

+0

** 항상 ** .forEach 또는 .map을 사용합니다 - 기능적인 방법입니다. for-in은'sugar.js'를 사용하기 때문에 이미 위험합니다. (그건 그렇고 멋진 라이브러리입니다.) – kornfridge

0

배열 인스턴스에 추가하는 대신 Array.prototype에 함수를 추가하기 만하면됩니다. 아래를 참조하십시오.

Array.prototype.sync = function(){this[0]=23;}; 

이 방법, 기능을 추가하기 전에 초기화 된 자들을 포함하여 모든 배열 인스턴스는 자동으로 한 번에 기능을 사용할 수 있습니다.

var a = []; 

a.sync(); // TypeError: Object [object Array] has no method 'sync' 

Array.prototype.sync = function(){this[0]=23;}; 

a.sync(); 
a // [23] 

var b = [1,2,3]; 
b.sync(); 

b // [23, 2, 3] 

는 그러나, 이제까지 만들어진 모든 배열 인스턴스에 해당 될 것입니다 및 생성되기 때문에 Array.prototype에 유용한/의미/재사용이다 이러한 기능을 추가 할 수 있습니다.

함수가 거의 사용되지 않는 경우. 위에 설명한 것처럼 각 인스턴스에 추가하는 것이 좋습니다. 어쨌든 배열 반복을 위해서는