當面試的時候遇到問原型鏈,閉包,還有作用域,直接 拿張紙和筆把原型鏈畫出來,閉包跟作用域直接用筆寫幾道題出來加深理解(因為我們是理科生,圖形和題目以及控制台輸出結果才是最直觀的方法)
問:什么是原型鏈?
答:Javascript是面向對象的,每個實例對象都有一個__proto_屬性,該屬性指向它原型對象,這個實例對象的構造函數有一個原型屬性prototype,與實例的__proto__屬性指向同一個對象。當一個對象在查找一個屬性的時,自身沒有就會根據__proto__ 向它的原型進行查找,如果都沒有,則向它的原型的原型繼續查找,直到查到Object.prototype._proto_為nul,這樣也就形成了原型鏈。
問:如何查找構造函數和原型中的屬性?
答:
構造函數.prototype 查看構造函數的原型屬性
實例對象.__proto__ 查看實例對象的構造函數的原型
實例對象.__proto__.constructor 查看實例對象的構造函數
原型鏈見過最好的圖片,不啰嗦

體現在代碼上:
其實非常的簡單
栗如:
我們可以先寫一個構造函數,然后在它的prototype中寫入方法,然后我們可以在入口函數中去寫一個實例對象,用實例對象的方法去調用,這樣子寫代碼可以做到邏輯清晰,代碼簡潔大方。
1 var letao; 2 $(function() { 3 letao = new Letao(); 4 letao.login(); 5 }); 6 7 var Letao = function() { 8 9 } 10 11 Letao.prototype = { 12 //登錄函數 13 login: function() { 14 // 1. 獲取登錄的按鈕添加點擊事件 15 $('.btn-login').on('click', function() { 16 // 2. 獲取輸入的用戶和密碼 17 var username = $('.mui-input-clear').val(); 18 var password = $('.mui-input-password').val(); 19 // 3. 驗證用戶名密碼是否輸入 20 if (!username) { 21 // 第一個參數是提示內容 第二個參數是一個對象(提示框的設置) duration提示信息的長短 type 提示的標簽類型 long short 和 數字 22 mui.toast('請輸入用戶名', { duration: 'long', type: 'div' }) 23 return; 24 } 25 if (!password) { 26 // 第一個參數是提示內容 第二個參數是一個對象(提示框的設置) duration提示信息的長短 type 提示的標簽類型 long short 和 數字 27 mui.toast('請輸入密碼', { duration: 'long', type: 'div' }) 28 return; 29 } 30 // 4. 調用登錄的API去驗證是否登錄成功 31 $.ajax({ 32 url: '/user/login', 33 data: { username: username, password: password }, 34 type: 'post', 35 success: function(data) { 36 // 5. 判斷返回的結果是否有錯誤 37 if (data.error) { 38 // 如果有錯誤把錯誤信息提示一下 39 mui.toast(data.message, { duration: 'long', type: 'div' }) 40 return; 41 }else{ 42 // 如果登錄成功就跳轉到個人中心頁面 43 window.location.href = 'user.html'; 44 } 45 } 46 }) 47 }) 48 } 49 }
這個如果ti
js作用域一步步透徹理解
https://www.cnblogs.com/skylar/p/3986087.html
在面試中,怎樣能通俗易懂又不白痴的回答出面試官提出的js中閉包問題?
https://www.zhihu.com/question/52491175
