2017-02-25 12 views
3

왜 (모든 경우) 나는이 일을 피해야한다 :2017 년 NodeList.prototype에 Array.prototype metods를 추가하지 않는 이유는 무엇입니까?

if (NodeList.prototype.map === undefined) { 
    NodeList.prototype.map = Array.prototype.map 
} 

또는 here에서 아무것도 (내가 []. 언급하고 있지 않다, 나는 그것이 느린 알고)

지금까지 내가이 알고있는 행위는 Prototype 1.0과 Mootools 시대에 널리 사용되었고, 무분별한 포기와 함께 사용되어 브라우저 간의 불일치로 인해 신속하게 가치 저하되었습니다.

특히 보수적 인 사용을 위해 지금은 문제없이 작동합니다. 우리는 여전히 명확해야합니까?

답변

1

NodeList이 표준 map 방법을 얻는다면, 그것은 당신과 충돌 할 수 있습니다.

는 현재의 방법은 프로토 타입 교체를 할당하기 전에 undefined를 보유하고 있는지 확인하여, 예를 들어 있는지 여부를 확인하더라도, 웹 표준을 쓰는 사람들은 변화가 침입하지 않도록 확인해야 우리 (웹 작성자의 의미) 작업 코드. 하위 호환성은 공개 웹의 핵심 원칙 중 하나입니다. 우리는 오늘 코드를 작성하고 일주일 또는 몇 년 동안 그대로두면 코드가 여전히 작동해야한다고 믿습니다.

프로토 타입과 Mootools는 이러한 이유로 매우 문제가되었습니다. 그들은 믿을 수 없을 정도로 인기가 있었고, 내장형의 프로토 타입을 수정하는 것을 주저하지 않았습니다.

.contains()이 덜 익숙한 .includes()이라는 문자열과 배열 모두에 대해 궁금해 한 적이 있습니까? 아, 맞아, 일관성없는 구현을 정의하여 that was because Mootools had already defined .contains() and the new standard ended up breaking a significant number of existing web pages.

TL : 아마 하나의 페이지는 중요하지 않지만 인기있는 라이브러리에서 사용하면 큰 문제가 될 수 있으므로 사람들은 연습을 완전히 피하는 경향이 있습니다.