오늘 저는 Bind Function의 구현을 계속 연구하고 Shim과 Polyfill의 진술을 배웠습니다. 지금 요약하겠습니다.
if (! function.prototype.bind) {function.prototype.bind = function (othis) {if (if this의 타입! == "function") {// ecmascript에 가장 가까운 것 5 내부 iScallable 함수 새 typeError ( "function.protopty.bind- 부드러운 것은 호출 할 수 없습니다"); } var aargs = array.prototype.slice.call (Arguments, 1), ftobind = this, fnop = function () {}, fbound = function () {return ftobind.apply (이 인스턴스 fnop && othis? }; fnop.prototype = this.prototype; fbound.prototype = new fnop (); 반환 fbound; };}이것은 공식 문서의 구현입니다. 두 가지 측면에서 내가하고 싶은 말에 대해 이야기하겠습니다.
첫 번째는 매개 변수, 농업 사용입니다
var aargs = array.prototype.slice.call (arguments, 1), 여기에 바인드 함수의 매개 변수 배열을 꺼내는 것이 있습니다. 첫 번째 매개 변수는 메소드에 바인딩되는 객체이고 두 번째 매개 변수는 다음과 같습니다.
aargs.concat (array.prototype.slice.call (arguments))); 여기서 배열 메소드를 사용하고 매개 변수 배열 뒤에 매개 변수를 삽입합니다. 이 기능은 반환 및 실행됩니다. 매개 변수 배열은 리턴되는 FBound 함수의 매개 변수 배열이므로 상단 및 하단 매개 변수 배열은 카레와 비슷합니다.
두 번째는 컨텍스트 변화를 이해하기 어려운 상황입니다. 결합 함수는 주로 컨텍스트를 바인딩하는 데 사용됩니다.
ftobind = 여기에 객체의 컨텍스트가 있으며, 아래의 적용 메소드가 컨텍스트를 사용할 수 있도록 객체가 바인딩되도록합니다.
fnop.prototype = this.prototype;
fbound.prototype = new fnop ();
여기서 FNOP는 FBOUND의 중개자로 사용되므로 FBOUND가 정의 될 때 상황에서 FBOUND가 실행되도록합니다. 원래
bound.prototype = self.prototype은 원래 속성을 통합 할 수 있지만, 이러한 방식으로 두 객체 속성은 동일한 위치를 가리켜 바운드를 수정하면 Self.Prototype가 변경되어 원래 의도가 아닙니다. 따라서 빈 기능 NOP를 통한 전환은 이러한 상황이 효과적으로 발생하는 것을 방지 할 수 있습니다.
기본 JS에서 Bind Function의 간단한 구현에 대한 위의 기사는 내가 공유 한 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.