命名空间、对象枚举

2022-07-28,,,

命名空间

在实际项目开发中,往往一个页面由多人共同开发,这个时候就存在一个问题,一旦命名的变量相同,将会导致冲突,如下

        // 张三定义的内容
        var num=123;
        //李四定义的内容
        var num="我是一个字符串" 

这个张三在后面调用num时就会发生错误,为了避免该情况的产生,我们一般使用立即执行函数+闭包的功能进行开发,如下

// 张三定义的内容
        var initZS = (function() {
            var num = 123;

            function sayNum() {
                console.log(num)
            }
            return sayNum;
        }())

        //李四定义的内容
        var initLS = (function() {
            var num = "我是一个字符串";

            function sayNum() {
                console.log(num)
            }
            return sayNum;
        }())

        initZS();//123
        initLS();//我是一个字符串

此时,虽然张三和李四定义的变量名称一样,但是互不影响,各自调用自己声明的变量。

方法的连续调用

小技巧,先了解即可,为对象的每个方法return this,如下

 var test = {
            sayName: function() {
                console.log("my name is liLie");
                return this;
            },
            sayHome: function() {
                console.log("my home is NanChong");
                return this;
            }
        }

        test.sayName().sayHome()//这个时候即可连续执行多个方法

for in循环

在学习for in循环之前,先普及一个小知识,当我们在调用对象的属性的时候 ,js会将 obj.name 隐式的转换为 obj[‘name’]

var obj = {
            name: "xiaowang",
            sex: "male",
            love: "game"
        }
//该语句会将obj的每一个属性名赋值给a
for (var a in obj) { 
            console.log(obj.a)//标记行
        }

通过上述代码,理想的情况是会在控制台打印出obj的每一个属性的值,但是运行代码确是三个undefined,这是怎么回事呢?
之前我们说过,在调用对象属性的时候,js会隐式的将obj.name转换成obj[‘name’],中括号里面是字符串,而此时上述for循环代码等同于

for (var a in obj) { 
            console.log(obj['a'])//标记行
        }

此时系统将a当作了obj的属性名,而在obj中我们没有定义a,故返回undefined,为了让系统将a识别为变量,我们只需要手动更改一个obj[a]即可,如下

for (var a in obj) { 
            console.log(obj[a])//标记行
        }

此时系统就能正确的打印出obj的所有属性值了。

hasOwnProperty() 和 instanceof

####hasOwnProperty()
hasOwnProperty()该方法会判断参数是否是对象的属性,并返回布尔值,语法如下

 var obj = {
            name: "xiaowang",
            sex: "male",
            love: "game"
        }
        //括号中的参数必须为字符串,否则会报错
        obj.hasOwnProperty("sex")//true
        obj.hasOwnProperty("abcc")//false

instanceof

instanceof用于判断一个a对象是否是通过b构造出来的,语法如下


    var a = new Object();
        a instanceof Object//true

    var b = new Array();
        b instanceof Object//true

通过上述代码不难看出,通过object() new的对象可以看出返回值是true,但是为什么 b instanceof Object也返回true呢,这是因为instanceof的原理是在对象的原型上查找是否由object,而array是object的子类,故返回true

本文地址:https://blog.csdn.net/weixin_47582190/article/details/109568447

《命名空间、对象枚举.doc》

下载本文的Word格式文档,以方便收藏与打印。