해당 내용은 '코어 자바스크립트' 서적을 참고하여 작성되었으며, 초보 개발자에게 유익한 책을 지필해주신 지은이 정재남 님께 감사의 말씀을 드립니다.
instance
인스턴스 개념은 앞선 내용에서 알아보았던 것과 같이 "new 생성자 함수를 통해 만들어진 변수" 라고 표현할 수 있다.var instance = new Constructor();
prototype
은 어디서 볼 수 있을까var Constructor = function(args){
this.name = args
}
console.dir(Constructor); // dir은 해당 속성을 객체의 계층 구조로 출력한다
/*
ƒ Constructor(args)
arguments: null
caller: null
length: 1
name: "Constructor"
prototype:
constructor: ƒ (args)
__proto__: Object
__proto__: ƒ ()
*/
// 크롬에서 이런식으로 출력되는 것을 확인할 수 있다
// 여기서 생성자 함수에는 기본적으로 prototype 존재함을 알 수 있고, 하나의 프로퍼티로 볼 수 있다.
var Constructor = function(args){
this.name = args;
}
var instance = new Constructor();
console.dir(instance);
/*
Constructor
name: undefined
__proto__:
constructor: ƒ (args)
__proto__: Object
*/
// 이런식으로 출력된다.
// 보면 위에서 Constructor prototype이 instance __propto__ 똑같은 것을 확인할 수 있다.
__proto__
var Person = function(args){
this.name = args
}
Person.prototype.getName = function(){
return this.name
}
var test = new Person('son');
console.log(test.__proto__.getName()); // undefined
console.log(test.getName()); // son
undefined
두번째 콘솔에는 인자값(son)
출력되었다. 왜 다를까?thisBinding
this
값이 인스턴스가 아닌 프로토타입으로 정해져서 찾을 수 없는 것이다.__proto__
생략 가능하다var Constructor = function(args){
this.name = args;
}
var instance = new Constructor();
console.dir(instance);
/*
Constructor
name: undefined
__proto__:
constructor: ƒ (args) // 여기 보면 아래 내용이 생성자 함수를 가리킨다는 것을 확인할 수 있다
arguments: null
caller: null
length: 1
name: "Constructor"
prototype: {constructor: ƒ}
__proto__: Object
*/