複習//JS部分實戰題
複習//JS部分實戰題
文章目錄
1、寫一個原型鏈繼承的例子
<div id="root"></div>在這裡插入程式碼片
function Elem(id) {
this.elem = document.getElementById(id)
}
Elem.prototype.html = function(val){
var elem = this.elem
if (val) {
elem.innerHTML = '<h1>nihao</h1>'
return this
} else {
return elem.innerHTML
}
}
Elem.prototype.on = function(type, fn){
var elem = this.elem
elem.addEventListener(type, fn)
}
var root = new Elem('root')
root.html('ggg')
root.on('click', function(){
alert('nihao')
})
2、建立10個a
標籤,點選對應標籤時彈出對應序號(作用域問題)
var alertI = function alertTarget(elem) {
var a = document.createElement('a')
a.innerHTML = elem + '<br>'
a.addEventListener('click', function () {
alert(elem)
})
document.body.appendChild(a)
}
var i
for (i = 0; i < 10; i++) {
alertI(i)
}
每個 i 要單獨執行一次函式,每個 i 在函式作用域內執行。因為for迴圈中 i 迴圈所需時間很少,其迴圈完而其後續的dom操作還沒開始,會導致點選每個a標籤內容都將彈出 10 。
3、實際開發中閉包的應用
閉包的應用形式:函式作為引數傳遞 / 函式作為返回值
isFirstLoad例子——函式作為返回值
<script>
function isFirstLoad() {
var contenList = []
return function (val) {
if (contenList.indexOf(val) >= 0) {
return '不是第一次出現'
} else {
contenList.push(val)
return '是第一次出現'
}
}
}
var firstLoad = isFirstLoad()
firstLoad(10) // 是第一次出現
firstLoad(10) // 不是第一次出現
</script>
把 list 定義在函式內,外部就無法修改了,保證每個傳入的資料得到正確判斷。
4、寫一個能遍歷物件和陣列的通用 forEach 函式
<script>
function objForEach(obj, fn) {
var key
// 陣列
if (obj instanceof Array) {
var arrForEach = obj.forEach(function (item, index) {
fn(item, index)
})
return arrForEach
} else {
// 物件
for (key in obj) {
fn(key, obj[key])
}
}
}
// 物件
var myBook = {
book1: '易經',
book2: '心靈擇食',
book3: '遇見未知的自己',
}
objForEach(myBook, function (key, value) {
console.log(key, value)
})
// 陣列
var arr1 = [1, 2, 3, 4, 5, 'lllll']
objForEach(arr1, function (index, item) {
console.log(index, item)
})
</script>
5、DOM 操作常用 API 有哪些?
(節點、文字、屬性)
1——增:
-
1-1 建立
document.createElement(tagName)
document.createTextNode(data)
document.createAttribute(name) -
1-2 加入
appendChild(aChild)
insertBefore(newElement,referenceElement)
innerHTML
innerText
2——刪:
- removeChild(child)
removeAttributeNode(attributeNode)
3——改:
-
3-1 改節點
replaceChild(newChild,oldChild) -
3-2 改樣式
style.*** = ssss;
setAttribute(name,value) -
3-3 改文字
innerHTML
innerText
nodeValue -
3-4 改屬性
setAttribute(name,value)
. 屬性 = 值
4——查:
- 4-1 標準DOM API
document.getElementById(id)
document.getElementsByTagName(name)
document.getElementsByName(name)
document.getElementByClassName(names)
document.querySelectorAll(selectors) - 4-2 親屬訪問
父關係:parenetNode、parentElement
子關係:childNodes、children、firstChild、lastChild
兄弟關係:previousSibling、nextSibling、previousElementSibling、nextElementSibling - 4-3 屬性獲取
getAttribute(attributeName)
getAttributeNode(attributeName)
6、編寫一個通用的事件監聽器
(代理、不代理)
宣告表示式的方式
<div id="div1">
<p><a>1</a></p>
<p><a>2</a></p>
<p id="p1">nihaoa</p>
</div>
<script>
function bindEvent(elem, type, selector, fn) {
if (fn == null) {
fn = selector
selector = null
}
elem.addEventListener(type, function(e){
var target
if (selector) {
target = e.target
if (target.matches(selector)) {
fn.call(target, e)
}
} else {
fn(e)
}
})
}
// 有代理
var div1 = document.getElementById("div1")
bindEvent(div1, 'click', 'a', function(e) {
alert(this.innerHTML)
})
// 無代理
var p1 = document.getElementById("p1")
bindEvent(div1,'click', function(e){
console.log(p1.innerHTML)
})
</script>
7、手寫一個Ajax,不依賴第三方庫
(1)建立“XMLHttpRequest”物件;
(2)建立http請求,帶有請求方式、url、驗證方式;
(3)設定相應http狀態變化的響應函式;
(4)傳送http請求。
var xhr = new XMLHttpRequest();
xhr.open('GET', './myfile.txt', true)
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
alert(xhr.responseText)
}
}
}
xhr.send(null)
alert(2)
// 若 xhr.open 中為 false——不為非同步事件——先執行xhr的函式,再彈出2
// 若為 true——為非同步事件——先彈出2,再執行xhr的函式
8、ADM 與 CommonJS 區別
模組化規範、同步非同步
- ADM
1.模組化規範:
依賴 require.js 庫
全域性 define 定義
全域性 require 使用
2.依賴 JS 自動、非同步載入 - CommonJS
1.模組化規範:
用 module.export 或 export 暴露模組
用 require使用
2.同步一次性載入
相關文章
- 【綜合複習_網路部分】
- js 部分學習整理JS
- 《Node.js實戰》學習筆記Node.js筆記
- js基礎複習JS
- NOIP 複習題
- 前端常見面試題(js部分)前端面試題JS
- 部分JS經典題目解析JS
- JS複習個人筆記JS筆記
- Spark SQL:JSON資料來源複雜綜合案例實戰SparkSQLJSON
- 網路複習題
- 區塊鏈習題複習區塊鏈
- 實戰練習之Jsp自定義標籤JS
- 複習 - node.js(介面案例)Node.js
- js 實現深複製/深複製JS
- 挑戰Java面試題複習第1天,堅持就是勝利Java面試題
- 前端面試題 | JS部分(附帶答案)前端面試題JS
- JS實現複製大法JS
- js實現複製功能JS
- java課後題複習Java
- Linux期末複習題Linux
- 《網路安全原理與實踐》一2.5複習題
- 曹廣福實變函式論與泛函分析部分習題解答 習題二 三 四函式泛函分析
- JSBridge實戰JS
- 挑戰中,Java面試題複習第4天,堅持就是勝利。Java面試題
- JS複習之深淺拷貝JS
- js實現複製連結JS
- JS如何實現點選複製功能,JS點選複製文字JS
- NodeJS 實戰系列:DevOps 尚未解決的問題NodeJSdev
- [前端學習]js特效部分學習筆記,第三天前端JS特效筆記
- Oracle9i高階複製(單向複製部分)實施完畢Oracle
- 高校戰“疫”網路安全分享賽-部分PWN題-wp
- 以太坊開發實戰學習-Web3.js(十)WebJS
- 以太坊開發實戰學習-Web3.js(九)WebJS
- Hadoop實戰-中高階部分 之 Hadoop 管理Hadoop
- JS中的陣列複製問題JS陣列
- MySQL運維實戰(7)建立複製MySql運維
- JS 物件如何實現深複製JS物件
- MySQL 8 複製(三)——延遲複製與部分複製MySql