Vue.js v2.1.10 源码探索 v1.0

Remember to keep it Simple, Stupid.Do one thing and do it best.

首先看下

JSON.stringify(str, replaceor, place)

源码片段 1

    function _toString(val)
   {
          // 排除 null  undefined
          return val == null
                 ? val + ''  // 稍作改动 源码直接输出 ''空字符串
                 :   typeof val === 'object'
                     ? JSON.stringify(val, null, 2);
                     : String(val)
   }

JSON.stringify(val, null, 2);

美化作用,第三个参数决定序列化后键值对前方的空格数
_toString 下划线的命名区分原生的toString

JSON.stringify({key:'Vue'})
//"{"key":"Vue"}"

JSON.stringify({key:'Vue'}, null, 4)
//  "{
//       "key":"Vue"
//   }"


源码片段2: 函数当作值传递

     function map(
              str,
              isToLowercase
     ){
         var list  = str.split(','),
             //创造一个Plainboject 没有原型对象
             map   = Object.create(null),
             i     = 0; 
             for(; i < list.length; i++)
             {
                  map [ list[i] ] = true;
             }
             return  isToLowercase
                     ? function (val) {  return map[ val.toLowercase() ];}
                     : function (val) {  return map[ val ];}
      }      


     //为了判断是否是内置模块
     var isIn  = map('slot,component', true);  

     typeof isIn  // function
     isIn('sea')  // undefined
     isIn('slot') // true

利用了闭包可以访问内部参数 isToLowercase ,
还有就是把函数当作了返回值, 可以再次进行相关属性的判断
精妙

领个红包,小赞赏一下吧

你可能感兴趣的:(JavaScript)