写点什么

ARST- 日常打卡 2

用户头像
pjw
关注
发布于: 2021 年 04 月 04 日
ARST- 日常打卡2

Algorithm 每周至少一道算法题:力扣 20. 有效括号

/**  * s 仅由括号 '()[]{}' 组成 * @param {string} s * @return {boolean} */var isValid = function(s) {    let stack = []    let obj = {        '{':'}',        '[':']',        '(':')'    }    for(let i = 0; i < s.length; i++){        const element = s[i]        // 如果匹配到左边的括号 则入栈        if( element in obj){            stack.push(element)        } else {            // 没有匹配到左边的 则弹出栈中括号进行匹配            // 如果没有匹配到 说明不是有效括号            if( element != obj[stack.pop()]){                return false            }        }    }    // 如果栈是空的则说明都匹配到了    return !stack.length};
复制代码

Review 阅读并点评至少一篇英文技术文章:前端开发和后端开发的区别到底是什么?

Front End Developer vs Back End Developer – Definition and Meaning In Practice


其实一开始没有前后端这一说法,随着项目结构越来越庞大,慢慢的一部分人专注于处理数据来源和组合逻辑,另外一部分人更关注界面 UI 交互,就分离出了前端和后端。

前端语言基本是 js 的天下,随着 nodejs 日益完善,js 语言也可以跑在服务器上了。

Jeff Atwood 曾提出过 "any application that can be written in JavaScript, will eventually be written in JavaScript."

我相信以后开发者可以使用一种语言就可以开发应用。

Tip 学习至少一个技术技巧:Web Components 的使用

web components 主要用于封装自定义的元素达到复用代码的效果。


由 3 部分组成:

  1. **Custom elements(自定义元素):**一组 JavaScript API,允许您定义 custom elements 及其行为,然后可以在您的用户界面中按照需要使用它们。

  2. Shadow DOM(影子 DOM):一组 JavaScript API,用于将封装的“影子”DOM 树附加到元素(与主文档 DOM 分开呈现)并控制其关联的功能。通过这种方式,您可以保持元素的功能私有,这样它们就可以被脚本化和样式化,而不用担心与文档的其他部分发生冲突。

  3. HTML templates(HTML 模板): [` 和 `` 元素使您可以编写不在呈现页面中显示的标记模板。然后它们可以作为自定义元素结构的基础被多次重用。


基本使用:


// 创建一个类似 bootstrap 的消息弹窗组件 msg-modalclass MsgModal extends HTMLElement{    // 表示私有属性    #shadowDom;    constructor(){        super();        // model open 表示展示虚拟节点        this.#shadowDom = this.attachShadow({mode:"open"});        // 创建对话框        let content =  `<div class="mask"></div><div class="modal-container">    <div class="header">        <span class="title">提示</span><span class="close">X</span>    </div>    <div class="body">        <span>这是一段文本</span>        <input type="text" />    </div>    <div class="footer">        <span class="cancel">取消</span>        <span class="primary">确定</span>    </div></div> `;        this.#shadowDom.appendChild(content);        this.#close();        this.addEvent();    }    addEvent(){        let modal = this.#shadowDom.querySelector("modal-container");        modal.onclick = e=>{            switch(e.target.className){                case 'close':                    this.#close();                    this.dispatchEvent(new CustomEvent('cancel'));                    break;                case 'cancel':                    this.dispatchEvent(new CustomEvent('cancel'));                    this.#close();                    break;                case 'primary':                    this.dispatchEvent(new CustomEvent('success'));                    this.#close();                    break;            }        }
} #close(){ this.#shadowDom.querySelector(".mask").style.display = "none"; this.#shadowDom.querySelector(".modal-container").style.display = "none"; } open(){ this.#shadowDom.querySelector(".mask").style.display = "block"; this.#shadowDom.querySelector(".modal-container").style.display = "block"; }}customElements.define("msg-modal",MsgModal);
复制代码

Share 分享一篇观点和思考的技术文章:

什么是 WebGL

用户头像

pjw

关注

还未添加个人签名 2018.04.24 加入

还未添加个人简介

评论

发布
暂无评论
ARST- 日常打卡2