DoubleSRZee 2017-11-21 12:23 采纳率: 100%
浏览 2044
已采纳

JavaScript中push()和push.call()的使用

最近在写一个简单的jq的id元素获取的实现,在使用push遇到了点小麻烦。感觉push和push.call实现都可以,但是push无法实现。

代码大致意思是:通过封装了的循环函数去获取id元素,在循环函数中实现改变元素样式。封装时,为了函数中能够使用数组中的数据,使用函数的call方法借用了上下文,然后执行获取元素的函数,是用正则匹配id选择器字符,将获取到的dom节点追加到数组results中。问题出在了这里!追加的过程使用push直接追加不能实现,使用push.call()可以实现。以下是代码截图。

使用push时,打开控制台会显示错误this.style is undefined,div颜色无效。

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 30px;
            border: 1px solid red;
            margin: 10px 0;
        }
    </style>
</head>
<body>
<div id="dv"></div>
</body>
<script>
    var getId = function(id,results){
        results = results || [];
        var rquickExpr = /^(?:#([\w-]+))$/,
                m = rquickExpr.exec(id);
        if(m){
           if(m[1]){
               results.push.call(results,document.getElementById(m[1]));
//               results.push(results,document.getElementById(m[1]));  
               return results;
           }
        }
    };
    var each = function(arr,fn){
        for(var i = 0 ; i < arr.length;i++){
            if(fn.call(arr[i]) === false){//借用上下文,fn的this指向数组中的元素
                break;
            }
        }
    };
    each(getId('#dv'),function(){
        this.style.backgroundColor = 'pink';
    });
</script>
</html>
  • 写回答

1条回答 默认 最新

  • danielinbiti 2017-11-21 12:33
    关注
     没有push.call(),这是call函数的使用,不是push具有的
     具体可以看js的call函数
     results.push.call(results,document.getElementById(m[1]));
     =》
     results.push(document.getElementById(m[1]));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 笔记本上移动热点开关状态查询
  • ¥70 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 利用pthon计算薄膜结构的光导纳
  • ¥15 海康hlss视频流怎么播放
  • ¥15 Paddleocr:out of memory error on GPU
  • ¥30 51单片机C语言数码管驱动单片机为AT89C52