Jun 개발노트

JS 클로져

February 13, 2020

클로져 예제

function HelloFunc() {
this.greeting = "hello";
}
// HelloFunc 생성자함수 생성

HelloFunc.prototype.call = function(func) {
func ? func(this.greeting) : this.func(this.greeting);
};
// HelloFun의 프로토타입 객체에 call이라는 프로터 타입에 익명 함수대입
// 인자로 들어오는 값이 참이면 func()함수를 실행 / 거짓이면 this.func() 함수 실행

var userFunc = function(greeting) {
console.log(greeting);
};
// 함수 표현식으로 useFunc 변수에 greeting 값을 찍어주는 console 입력

var objHello = new HelloFunc();
// objHello 객체 생성
objHello.func = userFunc;
// func라는 키 값에 useFunc 대입
objHello.call();
// objHello의 부모 HelloFunc의 call()함수 호출 인자가 없으므로 this.func(this.greeting) 호출하여 Hello 인출

function saySomething(obj, methodName, name){
    return (function(greeting){
        return obj[methodName](greeting, name)
    })
}

function newObj(obj, name){
    obj.func = saySomething(this, "who", name);
    return obj
}

newObj.prototype.who = function(greeting, name){
    console.log(greeting + '' + (name || 'everyone'))
}

var obj1 = new newObj(objHello, 'zzon');

Written by Junho You 배운것을 기록하자