자바스크립트는 렉시컬 스코프
를 따지므로 함수를 어디서 호출했는지가 아니라 함수를 어디서 정의했는지에 따라 상위 스코프
를 결정한다. 함수가 호출된 위치는 상위 스코프 결정에 어떠한 영향도 주지 않는다. 즉, 함수의 상위 스코프는 언제나 자신이 정의된 스코프다.
// 생성자 함수 function con() { let a = 5; let b = 6; this.a = 1; this.b = 2; this.method = function () { console.log(a); console.log(b); }; this.__proto__.pro_method1 = function () { console.log(a); console.log(b); }; } let a = 55; let b = 66; obj = new con(); // 객체 생성 console.log(obj); // con {a: 1, b: 2, method: ƒ} console.log(obj.__proto__); // {pro_method1: ƒ, constructor: ƒ} console.log(con.prototype); // {pro_method1: ƒ, constructor: ƒ} console.log(obj.__proto__ === con.prototype); // true obj.method(); // 5 6 con.prototype.pro_method2 = function () { console.log(a); console.log(b); }; console.log(con.prototype); // {pro_method1: ƒ, pro_method2: ƒ, constructor: ƒ} console.log(obj.__proto__); // {pro_method1: ƒ, pro_method2: ƒ, constructor: ƒ} obj.pro_method2(); // 55 66 con.prototype.pro_method2(); // 55 66 obj.pro_method1(); // 5 6 con.prototype.pro_method1(); // 5 6