자바스크립트는 렉시컬 스코프를 따지므로 함수를 어디서 호출했는지가 아니라 함수를 어디서 정의했는지에 따라 상위 스코프를 결정한다. 함수가 호출된 위치는 상위 스코프 결정에 어떠한 영향도 주지 않는다. 즉, 함수의 상위 스코프는 언제나 자신이 정의된 스코프다.
// 생성자 함수 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