1. 哪個函數使用this this就指向當前
~~~
<input type="button" value="hello" id="test">
<script>
var value = "change"
var test = document.getElementById("test");
test.onclick = function(){
go();
}
function go(){
console.log(this.value);
}
~~~
2. setTimeout 是window的事件 this指向window
~~~
<input type="button" value="hello" id="test">
<script>
var value = "change"
var test = document.getElementById("test");
test.onclick = function(){
setTimeout(function(){
console.log(this.value); //change
},300)
//this還是指向window-->函數正常調用,this指向window
}
~~~
3. 箭頭函數解決this指向問題
~~~
<input type="button" value="hello" id="test">
<script>
var value = "change"
var test = document.getElementById("test");
test.onclick = function(){
setTimeout(()=>{
console.log(this.value);
},300)
}
</script>
~~~
4. bind 解決this指向問題
~~~
<input type="button" value="hello" id="test">
<script>
var value = "change"
var test = document.getElementById("test");
test.onclick = function(){
setTimeout(function(){
console.log(this.value); //hello
}.bind(this),300)
}
</script>
~~~
5. 定義變量裝載this
~~~
<input type="button" value="hello" id="test">
<script>
var value = "change"
var test = document.getElementById("test");
test.onclick = function(){
var self = this
setTimeout(function(){
console.log(self.value); //hello
},300)
}
</script>
~~~
6. call-->改變函數內部this,關鍵字的指向 call(thisObj,params)
~~~
var cheng={
name:"cheng"
}
var jiang = {
name:"jiang",
sayName(a,b){
console.log(this.name);
console.log(a+b);
}
}
jiang.sayName.call(cheng,1,2);
~~~
7. apply-->改變函數內部this關鍵字的指向 apply(thisObj,[params])
~~~
var cheng={
name:"cheng"
}
var jiang = {
name:"jiang",
sayName(a,b){
console.log(this.name);
console.log(a+b);
}
}
jiang.sayName.apply(cheng,[1,2])
~~~
6. call-->改變函數內部this,關鍵字的指向 call(thisObj,params)
~~~
~~~
this在函數和事件中的指向以及改變方法
~~~
<input type="text" value="童" id="input">
<script>
// var input =document.getElementById("input");
// var value="wang"
// input.onclick=function(){
// console.log(this.value)
// }
// input.onclick.apply()
// var name="tong"
// var obj={
// name:"wang",
// age:18,
// sayname:function(){
// console.log(this.name)
// }
// }
// obj.sayname.apply()
</script>
~~~
在構造函數中this的指向以及改變方式
~~~
<!-- bind,call,apply只能通過跟著函數(不能使用方法)來改變this,bind要使用在函數本身 其他的是在調用的時候-->
<script>
var obj={
name:"童"
}
class person{
constructor(name,age){
this.name = name;
this.age = age;
// this.sayname=function(){
// console.log(this.name)
// }
}
sayname(){
console.log(this.name)
}
}
var stu =new person("tong")
stu.sayname.call(obj);
// function fn(name){
// this.name=name;
// this.fn1=function(){
// console.log(this.name);
// }
// };
// var obj={};
// // fn.call(obj,'jack');
// fn.apply(obj,['jack']);
// console.log(obj.name);
// obj.fn1();
</script>
~~~
~~~
var name = "li";
var cheng = {
name: "cheng",
test() {
console.log(this.name)
}
}
// cheng.test.bind()()
// console.log(typeof(cheng))
// var a = cheng.test.bind()
// a()
// cheng.test.call();
// cheng.test.apply()
~~~
- JavaScript介紹
- js基本語法
- 調試方法
- 標識符
- 數據類型(基本,引用)
- 基本數據類型
- 引用數據類型
- 嚴格模式.
- 全局變量和局部變量
- DOM 節點
- DOM 改變元素內容(樣式 內容)
- 節點改變元素內容(通過父子節點找到元素然后操作)
- 添加元素
- 設置 移除 屬性
- DOM下的事件
- 知識點整理
- 異步
- Ajax
- this指向問題
- 設備類型檢測(手機 平板 電腦)
- 函數
- 函數的參數
- 重載
- 數據類型
- 構造函數
- 返回上一個網頁
- 數組 (重點)
- 增加數組內容
- 刪除數組元素
- 復制數組
- 修改數組元素(功能強大實現 增 刪 改)
- 數組元素查詢
- 數組遍歷
- 最值
- 展開語法
- join
- 排序問題
- 求和
- 顛倒數組
- 判斷是不是一個數組
- 二維數組
- 數組和字符串之間轉換
- 數組去重
- 將jquery對象轉為javascript對象
- 元素偏移量
- 獲取一個元素距離頂部的距離
- 可視區域寬高
- 布局視口 (移動設備)
- 文檔碎片
- 表格中的 thead tbody
- 獲取元素寬度
- 滾動區域寬高
- div滾動條設置
- 使用 offsetWidth 設置父元素寬度和子元素寬度之和一樣
- 字符串的方法
- js功能實現
- 點擊顯示 隱藏
- 點擊變色 兄弟元素隱藏.
- 點擊顯示隱藏區域.
- 兼容性問題.
- 選擇按鈕,
- 獲取外部樣式
- 點擊彈出下標
- 通過屬性改變img 的src
- 小米登錄 es6實現js
- try catch
- 小米登錄es5實現js
- js實現導航欄點擊加載多個頁面
- js實現網頁之間的跳轉和在指定div加載頁面
- iframe 高度實現自適應
- js 獲取滾動條距離頂端的距離
- jQuery animate() 方法 動畫效果
- fade(js實現遮罩層漸變色)
- js輪播實現
- 超哥輪播js
- 輪播動畫原理
- 數組實現瀑布流
- 電子表計時器date
- 從豆瓣接口上取數據實現搜索功能(重點!!!!)
- 封裝
- 不使用js-ajax 使用VueResource實現數據請求
- 需要常看的知識點
- 移動端響應布局rem
- rem+vw
- 原型
- JS的模塊化如何解決
- ES5和ES6模塊化寫法
- js內置對象
- 結構賦值es6
- 字符串模板 分割字符串
- 談基本數據類型中的方法(本不帶有方法)
- Math
- date
- 正則
- 備選字符集
- 連號的備選字符集
- replace() 查找替換(過濾)
- 量詞
- 不確定的數量
- search找下標
- test()檢驗是否包含正則表達式
- 實例
- 驗證電話號碼
- 郵箱驗證
- 將指定內容過濾(天貓 淘寶)
- 預定義字符集(簡化)
- 嚴格匹配 ^ $
- Ajax
- http get post
- $.get()和$.post()詳解
- jquery-ajax 數據請求
- 使用Vue Ajax在網頁中渲染數據
- axios向服務器端get,post數據(重點)
- 跨域
- 原生Ajax
- 原理步驟 json解析字符串
- 多態
- js中的面向對象
- js中的類和繼承
- 原型和原型鏈
- 參數表達式
- 字符串中常用的方法
- mock.js
- scrollReveal 滾動顯示
- Node.js模塊里exports與module.exports的區別