## 對象的過程
描述new一個對象的過程
①創建一個新對象
```
var obj = new Object();
```
②讓Person中的this指向obj,并執行Person的函數體
```
var result = Person.call(obj);
```
③執行代碼,即對this賦值
```
obj.__proto__ = Person.prototype;
```
④返回this【判斷Person的返回值類型,如果是值類型,返回obj。如果是引用類型,就返回這個引用類型的對象】
```
if (typeof(result) == "object")
person = result;
else
person = obj;
```
*****
*****
## 原型
①所有的引用類型(數組,對象,函數),都具有對像特性,即可自由擴展屬性(除了null)
②所有的引用類型(數組,對象,函數),都有一個__proto__(隱式原型)屬性,屬性值也是一個普通對象
③**所有的函數**,都有一個prototype(顯式原型)屬性,屬性值也是一個普通對象
④所有的引用類型(數組,對象,函數),__proto__屬性值指向它的構造函數的“prototype”屬性值
⑤當試圖得到一個對象的某個屬性時,如果這個對象本身沒有這個屬性,那么會去它的__proto__(即它的構造函數的prototype)中尋找
*****
*****
## 同步和異步
### 同步和異步的區別是什么?
①同步會阻塞代碼執行,而異步不會
②alert是同步,setTimeout是異步
### 何時需要異步
①在可能發生等待的情況下
②等待過程中不能像alert一樣阻塞程序運行
③因此,所以的”等待的情況”都需要異步
前端使用異步的場景
①定時任務:setTimeout,setInterval
②網絡請求:ajax請求,動態加載
③事件綁定
## 數組API
### forEach 遍歷所有元素
```
var arr=[1,2,3]
arr.forEach(function(item,index){
//遍歷數組的所有元素
console.log(index,item)
})
```
### every 判斷所有元素是否都符合條件
```
var arr=[1,2,3]
var result=arr.every(function(item,index){
//用來判斷所有的數組元素,都滿足一個條件
if(item<4){
return true;
}
})
console.log(result);
```
### some 判斷是否至少一個元素符合條件
```
var arr=[1,2,3]
var result=arr.some(function(item,index){
//用來判斷所有的數組元素,只要有一個滿足條件即可
if(item<2){
return true;
}
})
console.log(result);
```
### sort 排序
```
var arr=[1,4,2,3,5]
var arr2=arr.sort(function(a,b){
//從小到大排序
return a-b
//從大到小排序
//return b-a
})
console.log(arr2)
```
### map 對元素重新組裝,生成新數組
```
var arr=[1,2,3,4]
var arr2=arr.map(function(item,index){
//將元素重新組裝,并返回
return '<b>'+item+'</b>'
})
console.log(arr2)
```
### filter過濾符合條件的元素
```
var arr=[1,2,3]
var arr2=arr.filter(function(item,index){
//通過某一個條件過濾數組
if(item>=2){
return true;
}
})
console.log(arr2)
```
### 判斷是否在可視區域
```
$(window).scroll(function () {
var a = document.getElementById("eq").offsetTop;
if (a >= $(window).scrollTop() && a < ($(window).scrollTop()+$(window).height())) {
alert("div在可視范圍");
}
});
```
### 判斷頁面到底部
網頁可見區域寬: document.body.clientWidth;
網頁可見區域高: document.body.clientHeight;
網頁可見區域寬: document.body.offsetWidth (包括邊線的寬);
網頁可見區域高: document.body.offsetHeight (包括邊線的寬);
網頁正文全文寬: document.body.scrollWidth;
網頁正文全文高: document.body.scrollHeight;
網頁被卷去的高: document.body.scrollTop;
網頁被卷去的左: document.body.scrollLeft;
網頁正文部分上: window.screenTop;
網頁正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的寬: window.screen.width;
屏幕可用工作區高度: window.screen.availHeight;
屏幕可用工作區寬度:window.screen.availWidth;
```
scrollTop + clientHeight == scrollHeight。
```
```
$(window).scroll(function(){
var scrollTop = $(this).scrollTop();
var scrollHeight = $(document).height();
var windowHeight = $(this).height();
if(scrollTop + windowHeight == scrollHeight){
alert("已經到最底部了!");
}
});
```
/**
* 函數節流方法
* @param Function fn 延時調用函數
* @param Number delay 延遲多長時間
* @return Function 延遲執行的方法
*/
```
var throttle = function (fn, delay) {
var timer = null;
return function () {
clearTimeout(timer);
timer = setTimeout(function() {
fn();
}, delay);
}
};
window.onresize = throttle(testFn, 200, 1000);
- css用法技巧
- 陰影被后面div遮擋
- 繪制一個三角形
- 圖像的灰白處理
- 一切居中
- 禁用鼠標事件
- 模糊文本
- 字體省略號
- 垂直居中
- box投影
- css動畫
- javaScript常見工具封裝
- 地址欄參數獲取
- 日期格式化
- Ajax
- scroll
- 緩動函數
- 事件綁定
- 阻止冒泡和默認行為
- 偽數組正常化
- 日期生成
- 拷貝
- javaScript基本知識
- javaScript基本知識
- javascript常見代碼塊
- vue常見問題
- 獲取參數
- vue常見問題/vue混入
- v-html指令問題集錦
- 正則獲取html中所有的中文字符
- 時間格式化
- 監聽路由的變化
- vue移動端滑動事件
- vue移動端圖片點擊放大
- 打包后背景圖片404的問題
- webpack打包后部分樣式失效
- IE的兼容問題
- post請求后臺無法接受參數
- 驗證碼
- vue開啟Gzip報錯
- v-html修改樣式
- app.css文件過大
- vue中中使用iframe
- babel對es6編譯不徹底 出現ie不兼容的問題
- vue單頁應用優化
- 吸頂問題
- 跨域session無法共享
- 登陸返回上一頁
- axois中使用delete數據傳遞問題
- 監聽數組對象數組中的屬性
- webpack
- webpack基本使用
- webpack打包刪除注釋
- js插件
- 輪播圖
- 面向對象模板
- 左滑右滑
- 存儲
- appcan
- appcan
- js深入研究
- 數組的參數傳遞問題
- 采用jquery的方法載入公共頁面后出現閃爍的問題
- html拼接無法綁定事件
- 吸頂問題
- async配合promise使用
- flutter
- 模擬器加載報錯
- 底部導航實現
- 模擬器出現錯誤
- flutter在idea下的快捷鍵
- flutter學習筆記
- 設計模式
- 觀察者模式
- nest
- nest基本說明
- nest錯誤處理
- vue高級
- 動態注入路由
- nest實戰
- 一項目準備
- window
- 端口進程被占
- mis包
- reactNative
- react-native-router-flux
- esLint
- eslint
- Cesium