首页 新闻 搜索 专区 学院

大家帮我讲解下call的实际运用机制.

0
悬赏园豆:20 [已解决问题] 解决于 2012-05-31 14:41

fn.call(this,this.elements[i]); //..虽然看了call的手册,这里还是难于理解
而且这段代码中为什么还要这样写call呢?
上面代码是不是相当于:
function(el){
el.style[prop] = val;
}.call(this,this.elements[i]);
谁详细的讲解一下这个的执行流程?

<div id="box">mybox</div>

(function(){
        
        function _$(els){
            this.elements = [];
            for(var i=0, len = els.length; i<len; i++){
                var element = els[i];
                if(typeof element === "string"){
                    element = document.getElementById(element);
                }
                this.elements.push(element);
            }
        }
        
        _$.prototype = {
            each : function(fn){
                for(var i=0, len = this.elements.length; i<len; i++){
                    fn.call(this,this.elements[i]);
                    console.log(this.elements[i])
                }
            },
            setStyle : function(prop,val){
                this.each(function(el){
                    console.log(el)
                    el.style[prop] = val;
                })
            }
        }
        
        window.$ = function(){
            return new _$(arguments);
        }
    })();
    $("box").setStyle("color","red")

 

 

深蓝色梦想的主页 深蓝色梦想 | 初学一级 | 园豆:6
提问于:2012-05-24 10:15
< >
分享
最佳答案
0

在没有call之前JS中继承主要用对象冒充的方式实现,后来在新版的JS中直接提供了call方法来替换此功能,参考这里:

《JavaScript高级程序设计》阅读笔记(十四):继承机制的实现

收获园豆:15
artwl | 专家六级 |园豆:16536 | 2012-05-24 10:25
其他回答(1)
0

与apply差不多,去看看权威指南,很详细的。只是增加一次函数内的调用域。

收获园豆:5
icepy | 园豆:587 (小虾三级) | 2012-05-24 14:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册