進入域後判斷是移動端仍是pc端顯示不一樣的頁面(PC/MOBILE)前端
不少狀況下,一個應用會有PC和移動端兩個版本,而這兩個版本由於差異大,內容多,因此不能用響應式開發可是單獨開發,而域名只有一個,用戶進入域後直接返回對應設備的應用,作法主要有兩種:後端
進入一個應用或者一個空白頁面後,經過navigator.userAgent來判斷用戶訪問的設備類型,進行跳轉服務器
用戶地址欄進入域的時候,服務器能接收到請求頭上包含的userAgent信息,判斷以後返回對應應用函數
function foo(){ getName = function(){console.log(1)} return this } foo.getName = function(){console.log(2)} foo.prototype.getName = function(){console.log(3)} var getName = function(){console.log(4)} function getName(){console.log(5)} foo.getName()//2 //foo是一個函數,也能夠說是一個對象,因此它也能夠掛載一些屬性和方法,18行在其上掛載了一個getName方法 //執行的結果是 getName()//4 //21行有一個全局函數,全局函數聲明提早後被20行的getName覆蓋,因此輸出4 foo().getName()//1 //foo()執行完成後,將全局的getName也就是window.getName給更改後返回this,而在這裏this執行的就是window,因此最後執行的就是window.getName,因此輸出1 getName()//1 //在上面已經更改全局的getName,因此依然是1 new foo.getName()//2 //new 操做符在實例化構造器的時候,會執行構造器函數,也就是說,foo.getName會執行,輸出2 new foo().getName()//3 //new操做符的優先級較高,因此會先new foo()獲得一個實例,而後再執行實例的getName方法,這個時候,實例的構造器裏沒有getName方法,就會執行構造器原型上的getName方法 new new foo().getName()//3 //先執行new foo()獲得一個實例,而後在new 這個實例的getName方法,這個時候會執行這個方法,因此輸出3 //除了本地對象的方法,其餘的函數都能new