Js Property Detail

Posted by on Tuesday, March 5, 2019 Tags:   1 minute read

프로퍼티 여우 꼬리 잡기

위에서 봤던 코드를 조금 더 꼬아볼까요?(이해가 충분히 되셨거나 우선 정의를 이해한 정도로 충분하시다면 아래는 안 보셔도 됩니다.)

function Obj() {
     var personProfile = 'foo baz';

     personProfile.get =

         this.getPersonProfile = function () {
             return personProfile;
      }
     this.appendSchoolToPersonProfile = function () {
         personProfile += ' school';
     }
 }

 var obj = new Obj();
 console.log(obj.getPersonProfile()); //undefined

이 코드의 핵심적인 부분은 다음과 같습니다. Obj라는 함수의 프로퍼티인 personProfile는 객체입니다. 그런데 이 personProfile의 프로퍼티인 get이 Obj의 프로퍼티인 getPersonProfile을 담고 있습니다. 정확하게는 reference를 담고 있다는 것이죠? 이렇게 되면 자신의 꼬리를 물고 뱅뱅도는 여우같은 코드네요.

이걸 console에서 출력을 하면 undefined가 뜨지만 에러는 아니네요. [출처][javascript] property란 무엇인가?|작성자 AIdev

color와_color

다음은 프로퍼티 color와 다시 그 안의 프로퍼티 _color의 관계를 조금 더 살펴보겠습니다.

 function Pen() {
	     this._color = null;
	     this.color = 0;
	 }

Object.defineProperties(Pen.prototype, {
	    color: {
	        get: function () {
	            return this._color;
	        },
	        set: function (value) {
	            this._color = value;
	        }
	     }
	 });

	var pen = new Pen();

	console.log(pen._color); // 0
	console.log(pen.color);  // 0;

위 코드를 동작시키면 둘다 0이 콘솔에 출력됩니다. 함수 Pen에서 _color는 분명 null값을 입력 받고 있지만 color에 5가 전해지면서 set 메소드에 의해서 5라는 값이 설정되는 것이죠.

이런 다양한 프로퍼티의 모습을 보면 역시 JavaScript가 비교적 자유로운 언어라는 것을 실감하게 되는 것 같습니다. [출처][javascript] property란 무엇인가?|작성자 AIdev