javascript继续 --- 多种继续体式格局剖析(ES5)

javascript继续

媒介

javascript作为一门轻量级的脚本语言在ES6和node.js的横空出世以后将其推向的新的高度,虽然 ES6 中涌现的新的天生对象的类语法花样,但依旧为ES5的语法糖,而我们依旧有必要从javascript的原生完成入手来相识它的继续完成体式格局,ES6给出了越发简约的牢固的类声明体式格局,有兴致的能够检察阮一峰的ES6入门,下面给出原文链接

es6 阮一峰http://es6.ruanyifeng.com

javascript的继续差别的开发者有差别的明白体式格局,笔者以为重要分为四种

 - 原型链继续
 - 对象假装继续(组织函数继续 不过我不喜欢这个名字)
 - 组合继续
 - 寄生组合继续

关于继续,能够预先声明一个Animal, 进而议论差别的继续体式格局.

    let Animal = (function () {
      function Animal (name) {
        this.name = name || 'Animal';
        this.sleep = function(){
          console.log(this.name + '正在睡觉!');
        }
      }
      Animal.prototype.eat = function(food) {
        console.log(this.name + '正在吃:' + food);
      }
      return Animal;
    })()
  1. 原型链继续

        let Cat = (function () {
          function Cat(){ 
          }
          Cat.prototype = new Animal();
          Cat.prototype.name = 'cat';
          return Cat;
        })()
    原型链是 javascript 的典范继续体式格局, 这类继续体式格局的最大特性就是同享,一切事例同享原型对象中的一切属性和要领, 同享是它的最大长处 也是它的最大瑕玷, 正对我们的差别需求, 比方大多数情况下我们经常须要某些属性是子类特有的  而一些读取属性要领须要同享,--别的此种继续没法向父类传参,没法完成多继续
  2. 对象假装继续

        let Cat = (function () {
          function Cat(name){
            Animal.call(this,name);
          }
          return Cat;
        })()
    对象假装继续就是简朴的应用call或许apply要领完成继续,这类继续最大的特性恰好与原型链继续相反不能继续原型属性/要领--非同享(子类自有一份), 一样这是它的长处也是它的瑕玷, 别的它处理了原型链继续中没法向父类传参的瑕玷, 而且能够完成某种意义上的多继续--(注重这类多继续是打引号的)
  3. 组合继续

        let Cat = (function () {
          function Cat(name){
            Animal.call(this, name);
          }
          Cat.prototype = new Animal();
          Cat.prototype.constructor = Cat;
          return Cat;
        })()
    组合继续是比较好的继续, 他是原型链继续和对象假装继续的合体, 合理的应用了这两种组合的特性(是特性不是长处^_^),既是子类的实例,也是父类的实例, 但有一个瑕玷就是调用了两次父类组织函数,天生了两份实例(子类实例将子类原型上的那份屏障了)形成内存糟蹋. 这也是用的最多的一种
  4. 寄生组合继续

        let Cat = (function () {
          function Cat(name){
            Animal.call(this, name);
          }
          (function(sub, sup){
            var Super = function(){};
            Super.prototype = sup.prototype;
            sub.prototype = new Super();
            sub.prototype.constructor = sub
          })(Cat, Animal)
          return Cat;
        })()

寄生组合继续是对组合继续的基础上的升华, 个人以为是可谓圆满的继续体式格局,革新的组合继续内存糟蹋的题目^_^

    原文作者:镰月
    原文地址: https://segmentfault.com/a/1190000013101444
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞