命名空间,对象枚举,判断区分方法

2019-01-14  本文已影响0人  开心的小哈

以前可以用
管理变量,防止污染全局,适用于模块化开发

var org={
                department1:{
                    jiji:{
                        name:"sadf"
                    },
                    ab:{
                        
                    }
                },
                department2 :{
                    jiji:{
                        
                    },
                    sadf:{
                        
                    }
                }
            }
            var name=org.department1.jiji.name;

来解决,不过比较麻烦所以一般用立即执行函数,来返回函数,形成闭包
例如:

var name="小明";
             
             var ko=function (){
                 var name="小白"
                 function hh(){
                     console.log(name)
                 }
                 return hh();
             }();
             

链式调用

var deng={
                smok : function (){
                    console.log("命名")
                    return this;
                },
                name : function(){
                    console.log("空间")
                    return this;
                }
                }
                deng.smok().name();

另一种写法

每当obj.name---->会隐式转换成obj['name']

var deng={
                wife1 : {name: "呵呵"},
                wife2 : {name : "yse"},
                wife3 : {name : "no"},
                wife4 : {name : "mmmm"},
                syanum : function (num){
                    return this['wife'+num];
                }
            }
            console.log(deng.syanum(2).name.toString());

对象的枚举

for in
1.hasOwnProperty:判断是否有是原型上面的属性,如果是返回false,如果不是true
2.in :判断这个对象是否有这个属性
3.instanceof :A instanceof B A对象是不是B构造函数构造出来的 是则true
看A对象的原型链上 有没有 B的原型
区分方法
1 [].constructor
obj.constructor

  1. [] instanceof Array --->true
    obj instanceof Array --->false
  2. Object.protitype.toString.call([])--->Object Array
    Object.prototype.toString.call(123)--->Object Number
    Object.prototype.toString.call(obj)---->Object Object
var obj={
                 name : "小明",
                 kaixin : "我和吗",
                 __proto__ : {
                     lastName : "dneg"
                 }
             }
             Object.prototype.abc="123";
             for (var key in obj){
                 // console.log(obj.key)
                 //不会打印系统定义的属性
                 if(!obj.hasOwnProperty(key)){//判断是否有是原型上面的属性,如果是返回false,如果不是true
                     console.log(obj[key])
//打印结果123 deng
                 }
                 
             }
上一篇 下一篇

猜你喜欢

热点阅读