js MDN에 Function 정보를 제공합니다.prototype.bind 호환 오래된 브라우저 함수 수정 제안
DN 원본
if (!Function.prototype.bind) {
Function.prototype.bind = function (oThis) {
Function.prototype.bind = function (oThis) {
if (typeof this !== "function") {
// closest thing possible to the ECMAScript 5
// internal IsCallable function
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable")
}
var aArgs = Array.prototype.slice.call(arguments, 1),
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
}
}
수정 버전 제시
if (!Function.prototype.bind) {
Function.prototype.bind = function (oThis) {
if (typeof this !== "function") {
// closest thing possible to the ECMAScript 5
// internal IsCallable function
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable")
}
var aArgs = Array.prototype.slice.call(arguments, 1),
fToBind = this,
fNOP = function () {},
fBound = function () {
fBound.prototype = this instanceof fNOP ? new fNOP() : fBound.prototype
return fToBind.apply(this instanceof fNOP
? this
: oThis || this,
aArgs.concat(Array.prototype.slice.call(arguments)))
}
if( this.prototype ) {
// Function.prototype doesn't have a prototype property
fNOP.prototype = this.prototype
}
return fBound
}
}
제시된 수정점은
첫 번째 곳
fNOP.prototype = this.prototype
⇩⇩⇩
if( this.prototype ) {
// Function.prototype doesn't have a prototype property
fNOP.prototype = this.prototype
}
함수 Function 때문에 수정되었습니다.프로토타입은 프로토타입 원형이 없어요.
ps: 어떤 사람들은 Function을 이상할 수 있습니다.프로토 타입은 대상이 아닌가요?왜 함수가 바뀌었어, 안 믿으면 콘솔에 가서 출력해 봐.
두 번째 곳
fBound.prototype = new fNOP()
⇩⇩⇩
fBound.prototype = this instanceof fNOP ? new fNOP() : fBound.prototype
원생bind 함수는 new 키워드를 사용하지 않았을 때 원시 함수인prototype이 드러나지 않기 때문에 수정되었습니다.
그래서 우리는 여기서 원형 계승을 진행할 때 함수가 실행되기 시작할 때 하고 함수 내부에서 판단하며 new 키워드를 사용한다면 계승하고 그렇지 않으면prototype을 노출하지 않는다
MDN Function.protype.bind 링크
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.