进入域后判断是移动端仍是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