美文网首页
阿里巴巴提前批前端编程测评思考

阿里巴巴提前批前端编程测评思考

作者: 云峰yf | 来源:发表于2017-08-13 22:14 被阅读0次

阿里巴巴提前批前端编程测试题

这道题是阿里巴巴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与面向对象

相关文章

  • 阿里巴巴提前批前端编程测评思考

    阿里巴巴提前批前端编程测试题 这道题是阿里巴巴2017年7月秋招提前批,前端岗位的编程测评题,原题是给出了html...

  • 如何学好javaScript

    第一批次:入门级,也适合想掌握一些前端技能的非前端工程师。《JavaScript DOM 编程艺术》 第二批次:成...

  • 无标题文章

    2017.7.10 【腾讯微信- 2018应届生提前批招聘已开启】腾讯微信应届生offer提前拿,前端等岗位现正热...

  • 面试阿里巴巴有多难,看看面经你就知道了

    面试阿里巴巴有多难,看看面经你就知道了 研发工程师(Java) 我参与了阿里巴巴中间件部门的提前批面试,一共经历了...

  • NI提前批

    周三下午,西工大,我和周总赶去宣讲会,不熟悉路,差十分钟开始才到,以后去外校参加宣讲会还是应该早些,毕竟是客场作战...

  • 知规则之提前批(上)

    经常有家长朋友咨询提前批的问题?比如哪些孩子适合报提前批?提前批多少分可以录取?提前批是否都需要体检?等等 什么是...

  • 前端团队

    阿里巴巴 FED github 淘宝前端团队 UED 阿里巴巴国际用户体验设计团队 AMFE 阿里无限前端团队 T...

  • 腾讯暑期 Web前端开发岗实习经历记录

    博主 3 月份在腾讯官网投递 Web 前端开发岗,一路从提前批走到正式批,战线长达3个月...真的不容易(菜是原罪...

  • 如何填报高考志愿2

    提前批未被录取 不影响本科批 山东高考成绩24日下午可查,28日提前批志愿填报,时间紧、任务重,而提前批包含的类型...

  • MBA院校选拔考试制度

    MBA院校经常采用笔试和面试相结合的选拔考试制度,通常分为提前批选拔和正常批选拔。 提前批选拔:提前批面试+全国统...

网友评论

      本文标题:阿里巴巴提前批前端编程测评思考

      本文链接:https://www.haomeiwen.com/subject/pcillxtx.html