0

하나의 파일 (파일 A)에 "var Signature"가있는 코드가 있습니다. 그리고 동일한 파일 A에서 메소드가 "Signature.prototype.PreSaveSignature = .."으로 작성됩니다. 두 번째 파일 (파일 B)에서 동일한 메서드가 "Signature.prototype.PreSaveSignature = .."로 만들어집니다.Javascript, 프로토 타입을 사용하여 두 개의 함수를 동일한 이름으로 정의 (두 개의 서로 다른 파일에 걸쳐)

IE8 이하에서는 File B ...의 메소드를 실행하고 IE9에서는 File A의 메소드를 실행합니다. Howecome? 프로토 타입을 사용하여 같은 이름의 두 가지 메소드를 사용하는 데 유효한 이유가 있습니까?

+1

두 파일이 모두 오류없이 포함되고 해석된다고 가정 할 때 항상 두 번째 정의를 사용해야합니다. 오류 콘솔을 확인 했습니까? – techfoobar

+0

@techfoobar 좋아, 다시 방금 디버깅을했고 더 이상 내가 말한 것을 수행하지 않는다 ... 나는 100 % 확신했지만 지금은 무엇을 생각해야할지 모르겠다. :) – goamn

답변

2

동일한 프로토 타입에 동일한 이름의 두 가지 메소드를 사용할 수 없습니다. 마지막으로 정의 된 오브젝트는 앞으로 생성되는 오브젝트에 대해 조작 중입니다. 메서드 포인터의 저장소 슬롯으로 Signature.prototype.PreSaveSignature을 생각할 수 있습니다. 하나의 값만 보유 할 수 있으며 해당 저장 영역 슬롯에 마지막으로 할당 된 값은 Signature() 객체의 서명에 사용됩니다.

다른 브라우저에서 다른 동작이 발생하는 경우 한 브라우저에서 다른 오류가 발생하거나 동적으로로드되는 다른 브라우저에서 다른로드 및 실행 타이밍을 얻고 있기 때문입니다.

+0

두 번째 단락에 대해서는 제 이해가 아닙니다. 프로토 타입에 대한 변경 사항은 프로토 타입이 변경되기 전에 생성 된 인스턴스를 포함하여 _all_ instances에 영향을 미칩니다. http://jsfiddle.net/nnnnnn/4Em5m/ 다른 한편으로 프로토 타입을 'Signature.prototype = {/ * something * /};'기존 인스턴스를 연결 해제하는 것 같습니다. http://jsfiddle.net/nnnnnn/4Em5m/1/ – nnnnnn

+0

@nnnnnn - 당신이 맞습니다 (http://jsfiddle.net/jfriend00/YWDWq/). 나는 그 단락을 제거 할 것이다. – jfriend00

+0

"객체는 제작 당시 프로토 타입을 상속받습니다"라고 생각하지만 프로토 타입이 객체이기 때문에 메서드를 업데이트 할 수 있습니다. 그러나 프로토 타입 자체를 다른 객체를 가리 키도록 할당하면 그 이후의 새 인스턴스는 http://jsfiddle.net/nnnnnn/4Em5m/1 – nnnnnn

관련 문제