• js 创建对象与继承


    简单工厂:不能体现类型,函数重复(js函数也是对象)占内存

    组合构造函数式与模型式:1.函数放在prototype中   2.引用属性要放在构造函数中  3.若重赋值Person.prototype=...  要改constructor属性值,并注意改写语句前创建的实例的prototype仍指向原来的原型对象

    最佳:动态原型模式:判断原型中的某个属性或函数是否存在,不存在则赋值。  解决了上述实例与新建原型脱离关系的问题(原实例的__proto__指针指向原来的prototype,构造函数的prototype指向新的prototype)

    寄生构造函数模式

    继承

    原型继承

    原型链的问题:原型链继承引用类型的时候,该变量会被所有子类实例共享(虽然普通类型也会被共享,但普通类型只能用=之类,会重写,引用类型会用push操作之类) 本质就是直接引用所带来的问题,所以不能直接指向父类的原型,那就指向父类的对象?那样子类原型中会有父类对象的属性(多余,不是纯粹的只继承原型)。指向父类原型不好,指向父类对象也不好,那只好指向一个中间对象,而中间对象的原型指向父类原型。

     借用构造函数继承:SuperClass.call(this)

    组合原型链和构造函数式继承

    最佳继承:寄生组合式继承、

      1 //继承原 2 function inheritPrototype(Sub, Sup)  3 new Sup(); //此处防止继承时父类的prototype还没赋值 4 //Sub.prototype=Sup.prototype;改变子类的原型会改变父类原型 5 //Sub.prototype= new Sup();会继承类上的属性也会继承原型上的属性,导致类上的属性重复

     6   function F() {}
     7   F.prototype = Sup.prototype;
     8   var f = new F();
     9   f.constructor = Sub; //这个constructor会加到对象f上,而不会改变F.prototype.constructor
    10   Sub.prototype = f;
    11 }
    12 
    13 //动态原型式构造函数
    14 function Person(name, skills) {
    15   this.name = name || '';
    16   this.skills = Array.isArray(skills) ? skills : [];
    17   if (typeof Person.prototype.learn !== 'function') {
    18     Person.prototype = {
    19       constructor: Person,
    20       learn: function() {
    21         console.log(this.name + " learn " + this.skills.join(','));
    22       }
    23     }
    28 } 29 } 30 31 //寄生组合式继承 32 function Man(name, skills) { 33 Person.call(this, name, skills); 34 this.sex = 'male'; 35 } 36 37 inheritPrototype(Man, Person);

    splice(下标,删除数目,添加项...)
    slice(begin,end)不改变元数组
    迭代every(ele,index,arr),some,forEach,filter,map
    归并 reduce(function(pre,cur,index,arr)【,initialValue】)
    reduceRight( 同上)
    func.call(this,a,b,c)
    func.apply(this,[a,b,c])
    每个函数都有一个prototype属性,他是一个指针,指向一个对象,用途是包含由特定类型的所有实例所共享的属性和方法。
    obj {constructor hasOwnProperty() isPrototypeOf() }

    indexOf(ele【,fomindex】)

    lastIndexOf

  • 相关阅读:
    Rolling Hash(Rabin-Karp算法)匹配字符串
    vim下单行长文本的时候卡顿解决办法
    设置vim的默认工作路径同时与自动设当前编辑的文件所在目录为当前工作路径不冲突
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
  • 原文地址:https://www.cnblogs.com/miaolq/p/5726462.html
Copyright © 2020-2023  润新知