JS杂笔

作者: 苦苦修行 | 来源:发表于2018-07-04 12:26 被阅读0次

    理解Object.defineProperty的作用就是为对象配置属性,并配置该属性的特点,比如能否修改,能否遍历等


    // 函数声明(Function Declaration)
    function sum(x, y) {
        return x + y;
    }
    
    // 函数表达式(Function Expression)
    let mySum = function (x, y) {
        return x + y;
    };
    

    SAP&MAP.png
    前端:你要懂的单页面应用和多页面应用
    单页面:一个html文件
    多页面:多个html文件

    split:本意是使...分离,分割成数组
    slice:本意是切片的意思,分割数组或字符串
    splice:本意是拼接的意思,向数组中添加项目,然后返回新数组 / 从数组中删除项目,然后返回新数组。
    reduce:本意是减少的意思,它用来将数组(多个值)计算成唯一一个值


    propagation&capture.jpg

    什么叫捕获什么叫冒泡彻底弄懂JS的事件冒泡和事件捕获这真是一篇好文章啊,尤其是文章最后举的例子真是神来之笔。简单来说,捕获就是由外向内执行,冒泡就是由内向外执行。

    他们是描述事件触发时序问题的术语。事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件。相反的,事件冒泡是自下而上的去触发事件。绑定事件方法的第三个参数,就是控制事件触发顺序是否为事件捕获。true,事件捕获;false,事件冒泡。默认false,即事件冒泡。Jquery的e.stopPropagation会阻止冒泡,意思就是到我为止,我的爹和祖宗的事件就不要触发了。

    浏览器默认是冒泡,也就是说addEventListener(event,fn,useCapture)的第三个参数默认为false


    参考:定义类
    在ES5中,变量或方法的声明会提升,在ES6中声明不会提升,比如class的声明啊,箭头函数应该也存在此问题吧?

    class中所有的函数、方法、构造函数、getters或setters都在严格模式下执行。因此如果我们没有指定this的值,this值将为undefined。看下列代码

    let speak = obj.speak;
    speak(); // undefined,即使在非严格模式下
    

    下面这段代码精彩哦:

    class Animal { 
      speak() {
        return this;
      }
      static eat() {
        return this;
      }
    }
    
    let obj = new Animal();
    obj.speak(); // Animal {}
    let speak = obj.speak;
    speak(); // undefined
    
    Animal.eat() // class Animal
    let eat = Animal.eat;
    eat(); // undefined
    

    改为ES5的写法:

    function Animal() { }
    
    Animal.prototype.speak = function() {
      return this;
    }
    
    // 原来还有这种写法,长见识了
    Animal.eat = function() {
      return this;
    }
    
    let obj = new Animal();
    let speak = obj.speak;
    speak(); // global object
    
    let eat = Animal.eat;
    eat(); // global object
    

    ES6中类的概念,本质上无非是ES5中原型链继承。类中的constructor中定义的是new出来的对象中的属性,constructor外面的就是原型链继承的东西了。类的继承extend就是原型链的继承。需要注意的是,在类中可以定义static方法,它只能通过类直接调用,而不能通过实例调用,它的本质等同于ES5中functionName.staticFunction

    forEach()和map()的区别:forEach用来对每个元素做处理,map用来修改数组的每个元素(map返回一个修改后的新数组,但不改变原数组)。
    ES6入门之set和map:注意这是一种数据结构,不是像map()是一种方法。
    JavaScript中reduce()方法:明白了reduce的意思是减少就抓住了重点。


    Δjs的严格模式和非严格模式的区别:

    相关文章

      网友评论

          本文标题:JS杂笔

          本文链接:https://www.haomeiwen.com/subject/ktvayftx.html