손으로 쓰는 기능.bind 함수
Function.prototype.bind = function(oThis){
if (typeof this!=="function") {//함수 없이 이상을 던지면
throw new TyperError("")
}
var aArgs = Array.prototype.slice.call(arguments, 1),//여기 있는 aArgs는 함수를 제외한 매개 변수입니다
fToBind =this,//바인딩할 객체
fNOP = function(){},
fBound = function(){
return fToBind.apply(
this instanceof fNOP ? this:oThis||this,aArgs.concat(Array.prototype.slice.call(arguments)));
)
};
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();
return fBound;
}
}
bind
의 용법을 이해하려면 apply
의 용법을 알아야 한다. MDN은 apply
는 함수 내부의 지향을 첫 번째 매개 변수로 직접 수정하고 두 번째 매개 변수 그룹을 함수에 넣고 이 함수를 운행한다고 지적했다.그러니까var obj = {test: function() { console.log(this, arguments) }}, func = obj.test; obj.test("Hello", ",", "world", "!"); func.apply(obj, ["Hello", ",", "world", "!"]);
이 두 가지 운행 방식은 같다.그러면 Polyfill로 돌아가서 발견한 매개 변수의 쓰기 방법은
args.concat(slice.call(arguments))
입니다.args
는 bind
때 정의된 첫 번째 파라미터를 제외한 다른 파라미터이고, 이때arguments
는 함수가 호출될 때의 파라미터를 가리키며, 수조의 조작을 통해 이 두 파라미터를 하나의 수조로 합쳐서 함수 내부로 전달한다.예를 들면 당신은 더 쉽게 이해할 수 있습니다./** **/ var newFunc = func.bind(obj, "Hello", ","); newFunc("world", "!");
그러면 다시 한 번 질문에 대답하겠습니다. 하나, 이것은 전형적인 속성 계승 방법입니다. 원래 사용합니다.
bound.prototype = self.prototype
원속성을 집적할 수 있지만 이렇게 두 대상의 속성이 모두 같은 곳을 가리키면 수정
bound.prototype
도 변화할 수 있다. 이것은 우리의 본의가 아니다.그래서 하나의 공함수self.prototype
를 통해 중전을 하면 이런 상황의 발생을 효과적으로 방지할 수 있다.bind는 함수를 되돌려줍니다.
if (!Function.prototype.bind) {
Function.prototype.bind = function(obj) {
var _self = this ,args = arguments; return function() { _self.apply(obj, Array.prototype.slice.call(args, 1)); } } }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.