簡(jiǎn)述JS中this的指向和如何改變它的指向
javascript中,this是動(dòng)態(tài)綁定的,它可以是全局對(duì)象、當(dāng)前對(duì)象或者任意對(duì)象,這完全取決于函數(shù)的調(diào)用方式,
this永遠(yuǎn)指向的是最后調(diào)用它的對(duì)象,也就是看它執(zhí)行的時(shí)候是誰(shuí)調(diào)用的。
改變this方法:方法call(), apply(), bind()
1、aa.call(Person, 4, 5); //this指向Person
2、aa.apply(Person, [4, 5]); //this指向Person
3、aa.bind(Person, 4, 5); //只是更改了this指向,沒(méi)有輸出
? aa.bind(Person, 4, 5)(); //this指向Person
原型鏈中a.b=2,a.b=3,到底是幾呢。在實(shí)例本身找到的話就不會(huì)向后面找了。
在訪問(wèn)一個(gè)實(shí)例的屬性的時(shí)候,現(xiàn)在實(shí)例本身中找,如果沒(méi)找到就去它的原型中找,還沒(méi)找到就再往上找,直到找到。這就是原型鏈。
構(gòu)造函數(shù),通過(guò)new一個(gè)實(shí)例出來(lái),實(shí)例里面有_proto_,_proto_里面有構(gòu)造器(constructor)和_proto_,? ? ? ?
prototype是函數(shù)才有的屬性,_proto_是每個(gè)對(duì)象都有的屬性。
var A = function(){};
var a = new A();
console.log(a.__proto__.__proto__.__proto__); //null
H5 的一些新特性
新增了一些語(yǔ)義化標(biāo)簽:header、footer、nav、aside、article、audio、video等
媒體查詢 @media 可以做出響應(yīng)式頁(yè)面
audio video 音頻視頻標(biāo)簽
Canvas標(biāo)簽:canvas 元素本身是沒(méi)有繪圖能力的。所有的繪制工作必須在 JavaScript 內(nèi)部完成
拖放:<img draggable="true"> 拖動(dòng)什么 - ondragstart 和 setData() 放到何處 - ondragover
新表單元素的引入(智能表單,對(duì)自動(dòng)輸入的內(nèi)容做基本的校驗(yàn)):input:type=number(數(shù)字)、email(郵箱)、url(地址)、range(滑塊)、date(日期)等,placeholder(占位符)、require(必填項(xiàng))。
本地存儲(chǔ):webstorage:sessionStorage和localStorage
sessionStorage(會(huì)話期間有效,關(guān)閉瀏覽器窗口就失效,容量5M,不同頁(yè)面或標(biāo)簽頁(yè)面間無(wú)法共享,適用于敏感賬號(hào)一次性登錄)
localStorage(本地存儲(chǔ)永久有效,多窗口共享,容量5M,用于長(zhǎng)期登錄+判斷用戶是否已登錄+適合長(zhǎng)期保存在本地的數(shù)據(jù))
獲取地理位置的api:Window.navigator.geolocation.getCurrentPosition(success,error)
CSS3
box-sizing:content-box? 寬度和高度分別應(yīng)用到元素的內(nèi)容框。
box-sizing:? border-box? 為元素指定的任何內(nèi)邊距和邊框都將在已設(shè)定的寬度和高度內(nèi)進(jìn)行繪制。
圓角和陰影,漸變
transform轉(zhuǎn)換和變形和動(dòng)畫(huà) @keyframes
@font-face 字體
數(shù)組去重或者是排序
js中數(shù)組去重:
var arr = [1,3,1,4,45,8,85,4,8,5,5];
Array.unique = function() {
? ? var newArr = [];
? ? for(var i = 0; i < this.length; i++) {
? ? ? ? //若在新數(shù)組中查不到arr[i]元素就向新數(shù)組中存儲(chǔ)arr[i],
? ? ? ? if(newArr.indexOf(this[i]) == -1) {
? ? ? ? ? ? newArr.push(this[i]);
? ? ? ? }
? ? }
? ? return newArr;
}
console.log(arr.unique());
排序:
var arr = [10, 20, 1, 2];
arr.sort(function(a,b){
? ? return a-b;
})
console.log(arr); //[1, 2, 10, 20]
閉包是怎么樣的,
當(dāng)function里嵌套function時(shí),內(nèi)部的function可以訪問(wèn)外部function里的變量。
會(huì)一層一層的往外訪問(wèn)。
js變量提升是什么:
變量提升:函數(shù)聲明和變量聲明總是會(huì)被解釋器悄悄地被"提升"到其作用域的最頂部。
JavaScript 中,函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部。函數(shù)聲明會(huì)比變量聲明更提前
JavaScript 中,變量可以在使用后聲明,也就是變量可以先使用再聲明。
JavaScript 只有聲明的變量會(huì)提升,初始化的不會(huì)。
https://blog.csdn.net/amaoagou_0124/article/details/79559401
ES6用哪些,
1、let和const:使用let來(lái)聲明一個(gè)值會(huì)被改變的變量,而使用const來(lái)聲明一個(gè)值不會(huì)被改變的變量,也可以稱之為常量。
2、可省略 :function,更簡(jiǎn)便,
3、箭頭函數(shù)中,它沒(méi)有自己的this,函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。
4、模板字符串:是為了解決使用+號(hào)拼接字符串的不便利而出現(xiàn)的。 使用 `` 將整個(gè)字符串包裹起來(lái),而在其中使用 ${} 來(lái)包裹一個(gè)變量或者一個(gè)表達(dá)式。
5、在ES6中用...來(lái)表示展開(kāi)運(yùn)算符,它可以將數(shù)組方法或者對(duì)象進(jìn)行展開(kāi)。例如:
const arr1 = [1, 2, 3];
const arr2 = [...arr1, 10, 20, 30];
這樣,arr2 就變成了[1, 2, 3, 10, 20, 30];
Promise
前后端通信用的什么
axios,get、post方法,傳入請(qǐng)求地址,參數(shù),成功和失敗返回什么。
axios.post('../data/a2.php', {
? ? name:'tom',
? ? age:33,
? ? id:'wodo id shi 222'
})
.then(function(res){
? ? self.userList=res.data;
})
.catch(function(res){
? ? console.log(res);
});
實(shí)現(xiàn)ajax的基本步驟和原理
原理:
Ajax的原理簡(jiǎn)單來(lái)說(shuō)通過(guò)XmlHttpRequest對(duì)象來(lái)向服務(wù)器發(fā)異步請(qǐng)求,從服務(wù)器獲得數(shù)據(jù),然后用javascript來(lái)操作DOM而更新頁(yè)面。
實(shí)現(xiàn)步驟:
? ? ? (1)創(chuàng)建XMLHttpRequest對(duì)象,也就是創(chuàng)建一個(gè)異步調(diào)用對(duì)象.
? ? ? (2)創(chuàng)建一個(gè)新的HTTP請(qǐng)求,并指定該HTTP請(qǐng)求的方法、URL及驗(yàn)證信息.
? ? ? (3)設(shè)置響應(yīng)HTTP請(qǐng)求狀態(tài)變化的函數(shù).
? ? ? (4)發(fā)送HTTP請(qǐng)求.
? ? ? (5)獲取異步調(diào)用返回的數(shù)據(jù).
? ? ? (6)使用JavaScript和DOM實(shí)現(xiàn)局部刷新.
數(shù)據(jù)雙向綁定原理和實(shí)現(xiàn)
v-model,原理就是利用了 Object.defineProperty() 這個(gè)方法重新定義了對(duì)象獲取屬性值(get)和設(shè)置屬性值(set)的操作來(lái)實(shí)現(xiàn)的。
之前項(xiàng)目有哪些需要優(yōu)化和安全
1、減少http請(qǐng)求,將一個(gè)頁(yè)面涉及到的所有零星圖片或者圖標(biāo)都包含到一張大圖里面,這樣就只需要加載這個(gè)一個(gè)圖片,而不是很多個(gè)圖片了
2、降低圖片的大小,壓縮圖片
3、圖片延遲加載(懶惰加載)或者是分頁(yè)加載,
4、html語(yǔ)義化,增強(qiáng)代碼可讀性和便于搜索引擎的搜索,seo。
項(xiàng)目遇到什么難題
狀態(tài)的管理
項(xiàng)目中遇到問(wèn)題如何解決
項(xiàng)目是如何進(jìn)行的,分配任務(wù)什么的
插槽和isGirl
flex有用嗎
box-sizing,一般什么是時(shí)候用
缺角的矩形和三角形
css樣式優(yōu)先級(jí)和兩個(gè)類一起用哪個(gè)生效
事件委托的概念
事件委托就是利用事件冒泡,只指定一個(gè)事件處理程序,就可以管理某一類型的所有事件。
https://www.cnblogs.com/liugang-vip/p/5616484.html
兼容性:
Event對(duì)象提供了一個(gè)屬性叫target,可以返回事件的目標(biāo)節(jié)點(diǎn),我們稱為事件源
標(biāo)準(zhǔn)中:ev.target
IE中:event.srcElement
跳轉(zhuǎn)(Forward)和重定向(Redirect)
跨域解決
簡(jiǎn)單的跨域請(qǐng)求jsonp即可,復(fù)雜的cors,窗口之間JS跨域postMessage,開(kāi)發(fā)環(huán)境下接口跨域用nginx反向代理或node中間件比較方便。
JSONP:利用script標(biāo)簽可跨域的特點(diǎn),在跨域腳本中可以直接回調(diào)當(dāng)前腳本的函數(shù)。
CORS:服務(wù)器設(shè)置HTTP響應(yīng)頭中Access-Control-Allow-Origin值為 * ,解除跨域限制。
普通跨域請(qǐng)求:只服務(wù)端設(shè)置header的Access-Control-Allow-Origin為 * ,前端無(wú)須設(shè)置,
若要帶cookie請(qǐng)求:前后端都需要設(shè)置。
前端:vue框架中 axios設(shè)置:axios.defaults.withCredentials = true
跨域后臺(tái)設(shè)置
? ? ? ? res.writeHead(200, {
? ? ? ? ? ? 'Access-Control-Allow-Credentials': 'true',? ? // 后端允許發(fā)送Cookie
? ? ? ? ? ? 'Access-Control-Allow-Origin': 'http://www.domain1.com',? ? // 允許訪問(wèn)的域(協(xié)議+域名+端口) /*
Git 常用命令詳解
git pull:拉取遠(yuǎn)程倉(cāng)庫(kù)
git commit:提交當(dāng)前工作空間的修改內(nèi)容
git push:推送遠(yuǎn)程倉(cāng)庫(kù),將本地commit的代碼更新到遠(yuǎn)程版本庫(kù)中
git log:查看歷史日志
git revert:還原一個(gè)版本的修改,必須提供一個(gè)具體的Git版本號(hào)
git如何處理版本沖突和新建合并分支
處理沖突:
先把云上的pull下來(lái),然后在本地合并修改之后,再commit,再push到云上。
創(chuàng)建合并分支:
git branch xxx (創(chuàng)建分支)
git checkout xxx (檢出)
git merge (合并分支)
webpack作用
主要有編譯,打包,模塊化管理,壓縮css,js,圖片等
cookie、sessionSttorage、localStory區(qū)別
數(shù)據(jù)存儲(chǔ)大小
cookie:4kb
webStorge:5mb
數(shù)據(jù)存儲(chǔ)有效期限
cookie:根據(jù)自己的設(shè)置時(shí)間
sessionStorage:關(guān)閉窗口后失效
localStorage:永久有效除非js刪除或者瀏覽器刪除
作用域
cookie和localStorage是在同源窗口,同一個(gè)瀏覽器共享的,sessionStorage只在同一個(gè)標(biāo)簽頁(yè)共享。
路由的跳轉(zhuǎn)方式:
路由的傳值:
組件間的傳值
1、父?jìng)髯樱?/p>
2、子傳父:
3、兄弟家組件傳值:
作用域鏈:
div垂直水平居中
position:absolute
top:50%
left:50%
transform:translate(-50%,-50%)
清除浮動(dòng)