工作之余学习总结第一篇

什么是js:js由三部分组成,主要分为ES(ECMAScript),BOM(浏览器对象模型),DOM(文档对象模型)

  ES是一种规范,相当于java的jdk,提供一些编程语法和核心基础;

  Array对象,Date对象,Boolean对象,String对象以及一些方法。

  BOM,浏览器对象模型,包含的核心对象就是window对象,代表浏览器的窗口,每打开一个窗口就是一个BOM,常见的window对象的方法有刷新、后退、收藏等方法如下图展示,全局对象、全局方法,全局属性都属于window对象或者方法。当调用wiindow对象是就可以直接省略window.,直接调用方法即可,比如最熟悉的方法,alert(),完整写法应该是window.alert(),可以自动忽略掉window。

 

   BOM中常用的方法:history.go(-1)退回历史记录中的上一个链接,括号里面的数据可以是负数也可以是正数,负数时回退到第几个页面。正数是前进到历史记录中第几个页面,当数字为0的时候刷新页面。

  Location对象:获取当前页面url信息,主要方法有host返回主机ip和端口,port返回端口,还有返回协议等方法。

  document:其实就是document对象,通过document来操作页面中的元素。eg:document.getElementById(),document.getElementByClass等选择器获取的方法。

  Screen:获取当前屏幕信息。

  History:返回浏览器访问过的历史地址信息。

  DOM,文档对象模型,浏览器打开一个窗口,排除上边截图的部分,所展示的内容就是所谓的DOM。DOM是w3c的一个标准,定义了一系列的方法来渲染页面和修改页面的数据,DOM由很多的节点组成,有元素节点,文本节点,属性节点等节点如下图:

 DOM就是通过操作这些元素来将页面动态的展示给用户。DOM的主要表现如下图,A部分展示的是BOM,B部分展示的是DOM也就是窗口中一个页面的展示。

 

 

 对于Object.defineProperty(),给一个对象定义属性,或者修改一个对象的已经存在的属性,有set和get方法,能够监听一个对象获取和设置属性的动作。

  接下来就是vue实现双向数据绑定的基本简单版实现了。双向数据绑定最主要是体现在两个方面,视图修改可以同步数据修改,数据修改可以同步修改视图。这时就要涉及前端的mvvm模式,m也就是model数据层指的是vue的data,v代表展示的页面,vm就是数据和展现层的交互,由vue完成。

  而当视图改变时想要修改数据,相对来说比较简单,keyup事件等由DOM提供的方法都可以在视图修改时修改数据,但是想要实现修改数据时同时修改视图,就需要Object.defineProperty()的set属性来监听数据的修改动作,从而去改变视图展示的数据。

  其实说白了,双向数据绑定,唯一的难点就是如何监听到数据改变时的动作。一下代码可以简单实现在修改数据时同时会修改视图:

<body>
    <div id="app">
        {{msg}}
    </div>
    <script>

        var str = {}
        function setData(newValue) {
            document.getElementById("app").firstChild.textContent = newValue;
        }

        Object.defineProperty(str, "msg", {
            get: function () {
                console.log("获取数据操作了")
                return msg;
            },
            set: function (newValue) {
                console.log("设置新的值了")
                setData(newValue);
            }
        });
        setTimeout(() => {
            str.msg = "我改变了";
        }, 1000);
    </script>
</body>

 

 直接在控制台就行修改,就可以将视图中的数据同步修改。vue中是通过发布订阅者模式进行实现,当发布者发布新的内容,所有的订阅者均会接收到对应的信息。当数据发生变化时通过数据劫持会将变化提供给给订阅器,订阅器会找到对应的订阅者,通知订阅者进行数据改变,订阅器就会添加订阅者,然后从而更新视图,还需要解析器,解析每个指令,从而将数据渲染到指定位置。

 

思维方式的锻炼,可以根据生活中某些事,自己进行分析,从开始到结尾,根据前因后果去梳理,从而达到让自己通过编程能够实现某一目的,其实就是分析需求,最终实现需求,要考虑到实现需求是需要的参数,以及实现需求的方法,还要考虑在实现需求是会出现的所有突发情况,发生突发情况之后需要对计划进行怎么的修改,直到最后完成该需求,而最后的结果大致可分为三种,完成需求,未完成需求。而未完成需求还分为全都没有完成,完成了一部分,当完成一部分需要做的事情也要考虑到。

比如给领导要出差,需要你买票。

首先你要向领导问清楚,出差的时间,地点,人员,其他随行人员是让他们自己订票还是我来订票,随行人员是跟领导一起出发还是分不同方式出行,领导对交通工具和座位有没有特殊要求,出发时是在家里出发还是公司集合出发,领导以及随行人员的身份证信息。这是买票前的询问。

买票时,你需要查询出发时的天气,以及当天天气会不会影响交通出行的航班,如果领导提供出行的方式,优先去查询第一种出行方案,看第一种出行方案能够满足老板提出的所有要求,如果满足则直接购买,并返购买之后的出票信息。如果第一种出行方案不满足,则自动去筛选第二种出行方案,如果第二种出行方案满足,则返回给领导,说明第一种出行方案满足不了领导的要求,第二种出行方式也能够满足,是否需要修改为第二种出行方式,如果同意则购买并返回出票信息。如果第二种方案也无法满足领导的出行方案,直接进行第三种出行方案的筛选,接下来就跟第二种执行方案的执行方式一样了,如果循环,直到找到合适的出行方式,最终将出票信息返回给领导。最终的出票结果将作为程序执行完之后的结果。

  

posted @ 2019-12-01 11:38  背着泰山找黄河  阅读(238)  评论(0编辑  收藏  举报