스스로 콜,apply,bind
const obj = {
name:'joy',
};
function getName() {
console.log(this.name);
}
Function.prototype.newApply= function () {
console.log(this);
};
getName.newApply(); //ƒ getName(){ console.log(this.name); }
이때 출력됩니다.this는 getName 함수입니다.내가 전에 쓴 문장(this의 지향을 확정)에 의하면,this 귀속의 우선순위는
화살표 함수 > new > 명시적 > 암시적 > 기본 바인딩
call, apply는 디스플레이 귀속에 속합니다. 화살표 함수와new로 대체할 수 없습니다. 그렇지 않으면 우선순위가 바뀝니다. 은식 귀속 방식만 사용할 수 있습니다.
const obj = {
name:'joy'
};
function getName(){
console.log(this.name);
}
Function.prototype.newApply= function (that) {
that.myFn = this;
const result = that.myFn();
return result
};
getName.newApply(obj); //joy
여기는this의 지향을 바꾸는 기능을 초보적으로 완성하였으니, 우리 좀 보완합시다
const obj = {
name:'joy'
};
function getName(a,b){
console.log(this.name,a,b);
}
Function.prototype.newApply = function (that,arg) {
if(typeof this !== 'function'){
throw this+'is not a function'
}
that = that || window; // window
arg = arg || [];
that.myFn = this;
const result = that.myFn(...arg); // ,
delete that.myFn; // ,
return result;
};
getName.newApply(obj,[1,2]); // joy
const obj = {
name:'joy'
};
function getName(a,b){
console.log(this.name,a,b);
}
Function.prototype.newCall = function (that, ...arg) {
if (typeof this !== 'function') {
throw this + 'is not a function'
}
that = that || window; // window
that.myFn = this;
const result = that.myFn(...arg); // ,
delete that.myFn; // ,
return result;
};
getName.newApply(obj, 1, 2); // joy 1 2
이상은 apply와call이 스스로 실현하는 방식입니다.
const obj = {
name:'joy'
};
function getName(){
console.log(this.name);
}
Function.prototype.newBind = function (that) {
const fn = this;
return function () {
fn.apply(that)
}
};
getName.newBind(obj)() //joy
const obj = {
name:'joy'
};
function getName(){
console.log(this.name);
}
Function.prototype.newBind = function (that) {
if (typeof this !== 'function') {
throw new TypeError('Error')
}
const args = [...arguments].slice(1);
const fn = this;
return function () {
fn.apply(that)
};
//
return function F() {
// , new this
if (this instanceof F) {
return new fn(...args, ...arguments)
}
return fn.apply(that, args.concat(...arguments))
}
};
getName.newBind(obj)() //joy
콜,apply,bind를 실현하는 내용입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.