阿里巴巴提前批前端程式設計測評思考
阿里巴巴提前批前端程式設計測試題
這道題是阿里巴巴2017年7月秋招提前批,前端崗位的程式設計測評題,原題是給出了html和css程式碼,讓考生寫js程式碼,js程式碼提示可以用ES6寫,並且要用物件導向的思維寫。js部分給了一個init()和兩句註釋。
- 題目:提供一個列表,每個列表後面有個刪除按鈕,點選相應的刪除按鈕就可以刪除相應的列表的其中一行,並且要以物件導向的方式實現。
- 我的思路
1.第一反應:
1.1獲取頁面中的所有刪除按鈕元素
1.2點選事件監聽
1.3列表獲取及移除
2.事件委託優化:
2.1獲取頁面中的列表元素
2.2點選事件監聽
2.3列表獲取及移除
3.加入物件導向(OOP)思維
3.1.把列表和聯絡人都看作是一個物件,把相關的功能封裝到物件裡去
3.2.獲取頁面中的列表元素並監聽點選事件
3.3.列表獲取及移除
_3.JS的委託物件導向思維
_3.1.建立一個DOMPlayer物件專門操作DOM
_3.2.建立一個List物件並且和DOMPlayer建立原型鏈關聯
_3.3.建立list例項,直接呼叫相關方法
4.其他的考慮
4.1事件監聽的移除
4.2前端和後端的互動
4.3是否可以使用MVVM的方式完成這個需求 - 答案:
//第一反應
init()
function init() {
const deleteBtn = document.querySelectorAll(".user-delete")
deleteBtn.forEach(d => {
d.addEventListener("click", removeItem)
})
}
function removeItem(event) {
event.target.parentNode.remove()
}
// 事件委託優化
init()
function init() {
const J_List = document.querySelector("#J_List")
J_List.addEventListener("click", removeListItem)
}
function removeListItem(e) {
e.target.className.includes("user-delete") && e.target.parentNode.remove()
}
//OOP思維
class List {
constructor(contacts="") {
this.contacts = contacts
}
initList(name,delBtnName) {
const el = document.querySelector(name)
this.initEvent(el,"click",(e)=>{this.removeItem(e,delBtnName)})
}
initEvent(element,eventName,cb){
element.addEventListener(eventName, cb)
}
removeItem(e,delBtnName) {
e.target.className.includes(delBtnName) && e.target.parentNode.remove()
}
}
class Contact {
constructor(id, name = "", sex = "", tel = "", province = "") {
this.id = id
this.name = name
this.sex = sex
this.tel = tel
this.province = province
}
removeItem() {
//
}
}
init()
function init() {
let list = new List(null)
list.initList("#J_List","user-delete")
}
//委託物件思維
let DOMPlayer = {
el:null,
initDOM(domName) {
el = document.querySelector(domName)
},
initEvent(eventName,cb){
el.addEventListener(eventName, cb)
},
removeItemFromClass(event,itemClassName){
event.target.className.includes(itemClassName) && event.target.parentNode.remove()
}
//更多方法
}
init()
function init() {
let List = Object.create(DOMPlayer)
List.initList = function (name) {
this.initDOM(name)
this.initEvent("click",(e)=>{
this.removeItemFromClass(e,"user-delete")
})
}
let list = Object.create(List)
list.initList("#J_List")
}
- 效果:通過
- 技巧:多準備基礎知識,手動練習程式碼
- 知識點:操作DOM,JS與物件導向
相關文章
- 【程式設計測試題】阿里巴巴2019年提前批程式設計題程式設計阿里
- 前端面試(1)之騰訊實習提前批前端面試
- 螞蟻金服!前端實習生!內推!提前批!前端
- C++程式設計批評系列 繼承的本質(轉)C++程式設計繼承
- 程式設計:思考?打字?思考!打字!程式設計
- 因《C程式設計伴侶》的爭執,談譚浩強《C程式設計》的批評C程式程式設計
- 阿里巴巴 中介軟體技術部 提前批 1面+2面+3面阿里
- 程式設計:思考或打字,思考和打字程式設計
- 關於設計評審的一些思考
- 從“遊戲批評”到“玩遊戲批評”遊戲
- 中文程式設計之思考 (轉)程式設計
- 大齡程式設計師思考程式設計師
- get:程式設計主要是思考程式設計
- 差異程式設計師-評《程式設計感悟》程式設計師
- 流批一體的近實時數倉的思考與設計
- 程式設計師小白的個人思考程式設計師
- 非同步程式設計模型的思考非同步程式設計模型
- 我的程式設計認知:多思考、多編碼、多測試程式設計
- AI 程式設計助手測評:GitHub Copilot vs 豆包 MarsCodeAI程式設計Github
- 前端開發面對設計稿的相關思考前端
- 2024.07.13科大訊飛提前批
- 10倍程式設計師的思考模型程式設計師模型
- 一個“老”程式設計師的思考程式設計師
- 對優秀程式設計師的思考程式設計師
- 前端埋點統計方案思考前端
- 好程式設計師web前端開發測驗之css部分程式設計師Web前端CSS
- 《程式設計師健康指南》書評程式設計師
- 高效前端程式設計實踐前端程式設計
- 前端程式設計師表白神器前端程式設計師
- 【外刊IT評論】Web程式設計是函數語言程式設計Web程式設計函數
- 程式設計實踐(評註版) 評註者序程式設計
- 《程式設計師的數學》思考題(一)程式設計師
- 程式設計師應該常問常思考程式設計師
- 前端思考前端
- LOTO示波器動作程式設計功能(命令批處理)程式設計
- 從零開始準備的前端春招實習(已拿頭條阿里騰訊提前批offer)前端阿里
- 最新測評!美圖大模型提前揭秘,這波風格化美到窒息大模型
- 好程式設計師Web前端分享前端CSS篇程式設計師Web前端CSS