js一些技巧.md

js中的constructor和prototype

组合继承与寄生继承

  function Parent(name){
        this.name = name;
        this.methods = function(){
              console.log("do someThing")
        }
  }

组合继承

function Children(name){
      Parent.call(this);  // 1. 拷贝属性
      this.name = name || 'zhangsan';
}
Children.prototype = new Parent();  //2. 原型指向父类实例
Children.prototype.constructer = Children; 3. 修正constructor 指向
  1. 可以继承实例属性和方法,也可以继承原型属性和方法
  2. 是子类实例,也相当于父类实例
  3. 子类原型指向父类实例,该父类实例又可以向上原型查找访问,修正constructor指向子类自身
  4. 可传参,call 方法可传参
  5. 调用两次父类构造函数, 占内存, 第一步拷贝过一次, 第二步导致以后的Jianren的实例里和Jianren原型上重复的属性

寄生组合类型

function Children(name){
      Parent.call(this);  // 1. 拷贝属性
      this.name = name || 'zhangsan';
}
(function(){
    function Storage(){}  // 创建一个中间类,空
    Storage.prototype  = Paren.prototype; //将中间类指向父类原型
    Children.prototype = new Storage(); //子类原型赋值中间类实例,往上查找,指向父类的原型
})()
Children.prototype.constructor = Children; // 修正子类constructor指向

与上面的组合继承相比, 第一步拷贝 和 第二步中间类(空类)不会重复有Human的属性, 略微复杂, 可以忽略不计, 完美方式

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!)(注2:更多内容请查看我的目录。) ...
    love丁酥酥阅读 1,381评论 4 8
  • js 实现继承的方式有: 原型链继承; 构造函数继承; 组合继承(原型链继承 + 构造函数继承)(最常用);(原型...
    黎贝卡beka阅读 1,495评论 0 0
  • 面向对象的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。ECMAScr...
    DHFE阅读 1,013评论 0 4
  • 注定不为虚荣而生 在天山的白雪中觉醒 锋利和死亡如此接近 不要试图挑拨我的血和灵魂 怒,拨剑而向 奔跑的速度中沉醉...
    冰之父阅读 468评论 0 4
  • 我从来没想过,我曾最爱吃的樱桃,竟然会成为一个泪点。 五月樱桃红。二十年了,从我记事起,五一对我的吸引力从来不...
    上又阅读 1,990评论 3 6