如何判斷是PC端仍是移動端來顯示頁面?

進入域後判斷是移動端仍是pc端顯示不一樣的頁面(PC/MOBILE)前端

不少狀況下,一個應用會有PC和移動端兩個版本,而這兩個版本由於差異大,內容多,因此不能用響應式開發可是單獨開發,而域名只有一個,用戶進入域後直接返回對應設備的應用,作法主要有兩種:後端

  1. 前端判斷並跳轉

    進入一個應用或者一個空白頁面後,經過navigator.userAgent來判斷用戶訪問的設備類型,進行跳轉服務器

  2. 後端判斷並響應對應的應用

    用戶地址欄進入域的時候,服務器能接收到請求頭上包含的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
相關文章
相關標籤/搜索