• js call函数


    在分析jquery源码时,遇到each函数体里的一段代码:

      1: if ( isObj ) {
      2:     for ( name in object ) {
      3:         if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
      4:             break;
      5:         }
      6:     }
      7: } else {
      8:     for ( ; i < length; ) {
      9:         if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
     10:             break;
     11:         }
     12:     }
     13: }

    对js中的call理解不深,便写了一段测试代码:

      1: function each( object, callback ) {
    
      2:     if ( Array.isArray( object ) ) {
    
      3:         for ( var i = 0; i < object.length; i++ ) {
    
      4:             // callback.call( null, i, object[i] );  
    
      5:             callback( i, object[i] );
    
      6:         }
    
      7:     } 
    
      8: }

    两个函数都可以得到正确结果,那为什么还要使用call方法,使用call方法的好处在哪里。于是在MDN上找到一段代码示例,经常认真分析,让我对call的认识更深一层。

      1: function Product(name, price) {  
    
      2:   this.name = name;  
    
      3:   this.price = price;  
    
      4:   return this;  
    
      5: }  
    
      6:   
    
      7: function Food(name, price) {  
    
      8:   Product.call(this, name, price); 
    
      9:   this.category = 'food';  
    
     10: }  
    
     11: Food.prototype = new Product();  
    
     12:   
    
     13: function Toy(name, price) {  
    
     14:   Product.call(this, name, price); 
    
     15:   this.category = 'toy';  
    
     16: }  
    
     17: Toy.prototype = new Product();  
    
     18:   
    
     19: var cheese = new Food('feta', 5);  
    
     20: var fun = new Toy('robot', 40); 
    

    是不是非常像C#中的继承关系呀,通过查看console,实例fun的属性都得到赋值。说明在调用call时,Product中的this就变成了fun,神奇吧,而C#中的函数就只能允许所在类调用,绝对不许为他所用!

    PS:我一般习惯性地查MDN,网友franky建议查ES5,Mark!

    ES5官方文档:http://es5.github.com/

    MDN:https://developer.mozilla.org


    ---end

    作者:清流鱼

    出处:http://www.cnblogs.com/qingliuyu/

    新浪微博:http://weibo.com/qingliuyu

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    产品需求说明书PRD模版
    会编程的 AI + 会修 Bug 的 AI,等于什么 ?
    会编程的 AI + 会修 Bug 的 AI,等于什么 ?
    会编程的 AI + 会修 Bug 的 AI,等于什么 ?
    luogu P1164 小A点菜
    luogu P1347 排序
    luogu P1195 口袋的天空
    luogu P1182 数列分段Section II
    luogu P1332 血色先锋队
    luogu P1983 车站分级
  • 原文地址:https://www.cnblogs.com/qingliuyu/p/2380745.html
Copyright © 2020-2023  润新知