fanfan_gg 2013-10-22 20:51 采纳率: 50%
浏览 2245
已采纳

关于 Extjs 4.X中 Ext.Function源码中的一些问题, 关于javascript基础知识的

Ext.Function中定义了如下一个叫做flexSetter的函数,其作用看看就明白
问题在于 其中做a===null判断的地方为什么不用a==null呢?

源码如下:

Ext.Function = {

/**
 * A very commonly used method throughout the framework. It acts as a wrapper around another method
 * which originally accepts 2 arguments for `name` and `value`.
 * The wrapped function then allows "flexible" value setting of either:
 *
 * - `name` and `value` as 2 arguments
 * - one single object argument with multiple key - value pairs
 *
 * For example:
 *
 *     var setValue = Ext.Function.flexSetter(function(name, value) {
 *         this[name] = value;
 *     });
 *
 *     // Afterwards
 *     // Setting a single name - value
 *     setValue('name1', 'value1');
 *
 *     // Settings multiple name - value pairs
 *     setValue({
 *         name1: 'value1',
 *         name2: 'value2',
 *         name3: 'value3'
 *     });
 *
 * @param {Function} setter
 * @returns {Function} flexSetter
 */
flexSetter: function(fn) {
    return function(a, b) {
        var k, i;

        if (a === null) {
            return this;
        }

        if (typeof a !== 'string') {
            for (k in a) {
                if (a.hasOwnProperty(k)) {
                    fn.call(this, k, a[k]);
                }
            }

            if (Ext.enumerables) {
                for (i = Ext.enumerables.length; i--;) {
                    k = Ext.enumerables[i];
                    if (a.hasOwnProperty(k)) {
                        fn.call(this, k, a[k]);
                    }
                }
            }
        } else {
            fn.call(this, a, b);
        }

        return this;
    };
},

展开全部

  • 写回答

1条回答 默认 最新

  • fanfan_gg 2013-10-23 06:46
    关注

    哈哈 结贴
    作者的思路是过滤null不过滤undefined 也就是说 作者允许这样

    var myObj={
    setValue:Ext.Function.flextSetter(function(name,value){
        this[name]=value;
    })
    

    };

    myObj.setValue(null,"none");

    而不允许这样

    var myObj={
    setValue:Ext.Function.flextSetter(function(name,value){
        this[name]=value;
    })
    

    };

    myObj.setValue();

    第一种容错 第二种不容错,容错处理点到为止,不过头

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 有人帮看看这个问题的嘛
  • ¥15 STM32悬赏求解答,ai不要来解答
  • ¥15 Mysql 一张表同时多人查询和插入怎么防止死锁
  • ¥20 centos6.7 安装libevent库.总是报错,如何解决?
  • ¥15 电脑买回,学校的有线网络总掉。
  • ¥20 关于普洛菲斯触摸屏与AB连接地址问题
  • ¥15 syri可视化不显示插入缺失
  • ¥30 运行软件卡死查看系统日志分析不出来
  • ¥15 C语言代码改正特征选择算法设计,贝叶斯决策,,设计分类器,远程操作代码修正一下
  • ¥15 String 类valuve指向的问题
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部