JavaScript学习笔记12

一、命名空间(其实就是对象)

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

多人开发,对象命名容易重复,就要解决命名空间的问题

下面是命名空间的老旧解法

在这里插入图片描述

用的时候,用下面的写法

在这里插入图片描述

下面是现在公司最常见的方法:用闭包来解决(也可用webpack),返回方法的调用

init是初始化,入口函数,入口名字

init调用了这个函数的功能

var name = "bcd";
        var init = (function() {
            var name = "acb";

            function callName() {
                console.log(name);
            }
            return function() {
                callName();
            }
        }());
        init();

在这里插入图片描述


  var name = "bcd";
        var init = (function() {
            var name = "acb";

            function callName() {
                console.log(name);
            }
            return function() {
                callName();
            }
        }());
        init();
        var initDeng = (function() {
            var name = 123;

            function callName() {
                console.log(name);
            }
            return function() {
                callName();
            }
        }())

在这里插入图片描述

二、思考问题

如何实现链式调用模式(模仿jquery)
obj.eat().smoke().drink().eat().sleep();

例:在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
不能像下面这样连续调用

在这里插入图片描述


上面改成下面的写法:用return this,就可以连续调用和执行了。deng.smoke().drink().perm().drink().smoke();

var deng = {
            smoke: function() {
                console.log('smoking,...xuan cool!!!');
                return this;
            },
            drink: function() {
                console.log('drinking...,ye cool');
                return this;
            },
            perm: function() {
                console.log('preming...,cool');
                return this;
            }
        }
        deng.smoke().drink().perm().drink().smoke();

在这里插入图片描述

三、属性的表示方法(查看属性)

obj.prop
查看就用.xxxx
obj[“prop”]
中括号也是访问属性的方法


例:想要传序号几,就会调用几
老方法是用switch case
这种方法不好,用下面的方法更好

用方括号来访问属性也是一样的(里面必须是字符串)

这两种基本上完全相同obj.name---->obj[‘name’]

想实现属性名的拼接,只能用方括号的形式

在这里插入图片描述


var deng = {
            wife1: {
                name: "xiaozhang"
            },
            wife2: {
                name: "xiaoliu"
            },
            wife3: {
                name: "xiaowang"
            },
            wife4: {
                name: "xiaomeng"
            },
            sayWife: function(num) {
                return this['wife' + num];
            }
        }

在这里插入图片描述

四、对象的枚举enumeration

1、 for in循环

for in循环(简化版for循环),目的是便利对象,通过对象属性的个数来控制循环圈数,这个对象有多少属性循环多少圈,而且在每一圈时,都把对象的属性名放到prop里面

在枚举里面。一定要写成obj[prop]不能加字符串

枚举也就是遍历:挨个知道信息的过程就叫这个数据组的遍历

<script>
        var arr = [1, 2, 3, 4, 5, 6, 7, 8, 0];
        //遍历 枚举 enumeration
        for (var i = 0; i < arr.length; i++) {
            console.log(arr[i]);
        }
    </script>

在这里插入图片描述


<script>
        var arr = {
            name: '123',
            age: 1231,
            sex: "sfaf",
            height: 100,
            weight: 84
        }
        for (var prop in arr) {
            console.log(prop + " " + typeof(prop));
        }
    </script>

在这里插入图片描述

上面就是for in循环,就是遍历用的。通过对象的属性个数来控制循环圈数,有多少个属性就会循环多少圈


for(var prop in obj)在循环每一圈的时候,他会把对象的属性名放在prop里面


想遍历谁就in谁,prop可以写别的,obj就是我们想要遍历的对象


var XX in XX 的格式是固定的

var 也可以写在外面,写成var key; for(key in obj1)效果是一样的
<script>
        var arr = {
            a: 123,
            b: 2341,
            c: 23124
        }
        var prop;
        for (prop in arr) {
            arr.prop++;
        }
    </script>

写成下面这样会报错

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

上面的obj.prop系统会以为我们写的是obj[‘prop’],系统会认为我们是在让他访问prop这个属性,不会把prop当成一个变量来使用。写成obj[prop]就可以成功访问了

在这里插入图片描述

在这里插入图片描述

写对象时用方括号的形式不容易犯错


<script>
        var obj = {
            name: '123',
            age: 123,
            sex: 'male',
            height: 1230,
            weight: 41,
            __proto__: {
                lastName: 'deng'
            }
        }
        for (var prop in obj) {
            console.log(obj[prop]);
        }
    </script>

在这里插入图片描述

2、hasOwnProperty

如果在遍历的时候,我们不想把原型上面的属性拿出来,可以用hasOwnProperty


一般与 for in 循环成套出现


hasOwnProperty 是一个方法,来判断这个对象是你自己的还是原型的, 任何一个对象里面都有 hasOwnProperty,里面是需要传参的,把属性名传进去(如 prop)。下面方法如果不是自己的属性,是原型上的属性,就不会返回。

在这里插入图片描述
在这里插入图片描述


注明:for in 循环理论上可以返回原型和原型链上的东西,一旦这个原型链延展到了的 object.prototype 上,不会打印系统的,只会打印自带的。

<script>
        var obj = {
            __proto__: {
                lastName: " deng",
                __proto__: Object.prototype //不会打印这个 object.prototype
            }
        }
    </script>

加 Object . prototype.abc = ‘123’; 加个!变成只有不是他的才打印

在这里插入图片描述

在这里插入图片描述


3、in操作符:很少用

in 操作符你的也是你的,你父亲的也是你的,只能判断这个对象能不能访问到这个属性,包括原型上;不是判断属性属不属于这个对象的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

判断一个属性属不属于这个对象的只能用 hasOwnProperty

4、instanceof

instanceof 操作用法类似于 in,但是完全不同

A instanceof B 的意思是 A 对象是不是 B 构造函数构造出来的;

记住是:看 A 对象的原型链上有没有 B 的原型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


判断这个变量是数组还是变量
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


区别传的变量是数组还是对象的方法:一是 constructor,二是 instanceof

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


第三种区分数组还是对象的方法:想让数组调用他的toString 方法

 <script>
        Object.prototype.toString.call([]); //[]会替换 this
        Object.prototype.toString = function() {
            //识别 this( 谁调的他, 这个 this 就是谁)
            //返回相应的结果
        }
        obj.toString();
    </script>

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值