欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javascript 之 继承

程序员文章站 2022-12-24 13:20:08
1.传统方式 >原型链 (过多继承了没用的属性) Grand.prototype.lastname = 'zhang' function Grand(); } var grand = new Grand(); Father.prototype = grand; function Father(){ ......

  1.传统方式--->原型链  (过多继承了没用的属性)

grand.prototype.lastname = 'zhang'
  function grand();
}
var grand = new grand();

father.prototype = grand;
function father(){
  this.name = 'hehe';
}
var father = new father();
 
son.prototype = father();
function son(){

}
var son = new son();              //son 即继承了father的,有继承了grand的 ,这就发生了矛盾,无论你需不需要继承这个属性,他都会继承来。

2.借用构造函数(1.不能继承借用的构造函数的原型,2.每次构造函数都要多走一个函数,只是视觉上节省了代码量)

function person(name, age, sex){
  this.name = name;
  this.age = age;
  this.sex = sex;
}
function student(name, age,sex,grade){       //借别人的方法去实现自己的东西,实际上没有继承的关系,只是用你的东西干我自己的事情。
  person.call(this,name,age,sex);
  this.grade = grade;
}
var studet = new student();
 
共有原型
father.prototype.lastname = 'zhang';
function father(){

}
// var father = new father();     //用原型继承的时候,需要实例化两个对象,但使用共有原型,就可以不用实例原型对象,直接使用构造函数的原型就可以
son.prototype = father.prototype;
function son(){

}
var son = new son();
 
 
可以用一个函数封装
javascript 之 继承

但这中也是有缺点的,就是你在给原型添加属性时,因为父亲和孩子都指向一个引用,改一个,另一个也会跟着变。这并不是我们想要到的,我们希望的是,我继承你,但我自己后定义的原型不想影响你。有自定义的,有共有的。这就引出了圣杯模式

 圣杯模式 

通过添加一个中间层,new middle()出一个新对象,让这个新对象的原型指向father的原型,让son的原型等于new middle()这个新对象,因为这个新对象是一个全新的对象,所以son的原型等于新对象并不会影响father的原型。样son既可以通过原型链找到father的原型,

javascript 之 继承

 

 利用闭包私有变量写法

javascript 之 继承