牛客网-前端大挑战-题解

牛客网-前端大挑战-(1-15)题解

本文章尽量用简洁的代码去完成题目要求,话不多说,上代码

1.修改 this 指向

题目描述 :封装函数 f,使 f 的 this 指向指定的对象

function bindThis(f, oTarget) {
   
    //方法1 apply()  注:直接f.apply(oTarget,arguments)不对,
    //因为题中说的是封装函数f,使用apply方法,会立即执行这个函数,
    return function(){
   
        return f.apply(oTarget,arguments);
    };
    
    //方法2 bind()  bind可以直接返回这个更换this的函数
    //只是改变了执行的上下文,并未立即执行而是回调执行。
    return f.bind(oTarget);
    
    //方法3 call()  apply、call是传参数形式的区别,
    //前者是参数数组,后者是参数项
    return function(x,y){
   
        return f.call(oTarget,x,y);
    };
} 

2.获取 url 参数

题目描述:获取 url 中的参数

  1. 指定参数名称,返回该参数的值 或者 空字符串
  2. 不指定参数名称,返回全部的参数对象 或者 {}
  3. 如果存在多个同名参数,则返回数组
function getUrlParam(sUrl, sKey) {
   
    let str = sUrl.split('?')[1].split('#')[0].split('&'); // 取出每个参数的键值对放入数组
    let obj = {
   };
    str.forEach(element => {
   
    let [key, value] = element.split('=');  // 取出数组中每一项的键与值
    if(obj[key] === undefined ){
      // 表示第一次遍历这个元素,直接添加到对象上面
        obj[key]=value
    }else{
   
        obj[key]=[].concat(obj[key],value); // 表示不是第一次遍历说明这个键已有,通过数组存起来。
    }});
    return sKey=== undefined ? obj:obj[sKey]||''   // 如果该方法为一个参数,则返回对象。
    //如果为两个参数,sKey存在,则返回值或数组,否则返回空字符。 
}

3.dom 节点查找

题目描述:查找两个节点的最近的一个共同父节点,可以包括节点自身.
输入描述:oNode1 和 oNode2 在同一文档中,且不会为相同的节点

function commonParentNode(oNode1, oNode2) {
   
    while(oNode1){
   
        if(oNode1.contains(oNode2))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值