2 fanfan gg fanfan_gg 于 2013.10.23 12:51 提问

关于 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
fanfan_gg   2013.10.23 22: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();

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
LR问题汇总
关于在LoadRunner11中的一些问题汇总
logic标签的问题及解答
关于struts学习中遇到的关于logic标签的一些问题和解答,logic标签的一些问题和解答。
关于长尾式差分放大电路静态分析中的一些问题
关于长尾式差分放大电路静态分析中的一些问题 关于长尾式差分放大电路静态分析中的一些问题
web前端面试中常见的js基础又实用的知识回顾
js基础但又实用知识的回顾 知识点:typeof、instanceof和constructor 1. js中5种原始数据类型: Number String Boolean Undefined Null 2. js中2种组合数据类型: 对象 数组 3. typeof返回的6种变量类型: ‘number’ — 这个值是数值; ‘string’ — 这个值是字符串; ‘boole
关于VMware虚拟机的一些问题
学习嵌入式Linux初期阶段都无可避免的要使用到VMware,因为新手一般不会安装Linux系统,所以需要在虚拟机上操作,那么,我总结一下最近学习中所遇到的问题及解决办法,我用的是VMware10.1版本的,其实无论什么版本,解决问题的方法都不会相差太多。   我是买的4412开发板,厂家提供了Ubuntu的镜像文件。VMware软件安装是比较简单的,取消掉一些不必要的选项,然后百度一下相应版本
关于计算机基础知识的理解
参考书籍:Linux鸟哥的私房菜所谓的计算机就是一种计算器,而计算器其实是:『接受用户输入指令和数据, 由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的信息』。关亍计算机的组成部分,主要分为三部分:  输入单元:包括键盘、鼠标、卡片阅读机、扫描仦、扃写板、控制屏幕等等一堆;  主机部分:这个就是系统单元,被主机机壳保护住了,里面含有 CPU 与主存储器等;  输出单元:例如屏幕、打
linux关于网络的命令介绍
导读 本文将讲述网络相关命令,作者假定读者具备TCP/IP协议栈的基础知识。对于相关命令及其输出只介绍它的基本的使用方法和大概的描述,具体协议将不作详细解释。 如今网络无疑是很重要的,linux系统中提供了丰富的网络测试与管理命令。我们来一起看看它们。 内容如下: 1、ping 发送TCMP回显请求报文,并等待返回TCMP回显应答。 ping [OPTIONS]...
JS与英语
Exponential指数   .toExponential()//将数值转换为科学计数法表示Fix固定                 .toFixed()//返回指定小数位数的字符串表示Precision精确度   .toPrecision()//对数值返回固定大小格式instance实例        instanceof//操作符,用于测试某对象是否是某类型的实例caller调用者    ...
extjs javascript一些PPT
关于extjs的介绍性PPT,还有关于javascript的一些基础性介绍
关于extjs中tabPanl关闭后的内存释放
关于extjs中tabPanl关闭后的内存释放