继承

继承
什么是继承

  • 现实生活中的继承
  • 程序中的继承

对象的继承

// 继承演示(对象的继承)
function extend(child, parent) {
  for (var key in parent) {
    if (child[key]) continue;  // 如果child中有该成员,不替换成parent对象中的成员
    child[key] = parent[key];
  }
}

var parent = {
  name: '王',
  age: 60,
  house: '别墅',
  money: 1000000,
  car: '玛莎拉蒂',
  play: function () {
    console.log('弹吉他');
  }
};

var child = {
  name: 'jack',
  age: 18
};
// 把parent对象的所有成员 拷贝到 child对象上 (实现继承)
extend(child, parent);

原型继承

// 1 原型继承
function Super() {
  this.color = 'red';
}
function Sub() {
}

Sub.prototype = new Super();
Sub.prototype.constructor = Super;

var sub = new Sub();
console.log(sub.color);

//原型继承的问题:无法给构造函数传参

构造函数的属性继承:借用构造函数

function Person (name, age) {
  this.type = 'human'
  this.name = name
  this.age = age
}

function Student (name, age) {
  // 借用构造函数继承属性成员
  Person.call(this, name, age)
}

var s1 = Student('张三', 18)
console.log(s1.type, s1.name, s1.age) // =>human 张三 18

借用构造函数继承问题:无法重用方法

组合式继承

// 结合原型继承和组合式继承
function Person(name, age, sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
}
Person.prototype.sayHi = function () {
  console.log(this.name);
}
function Student(name, age, sex, score) {
  Person.call(this, name, age, sex);
  this.score = score;
}
Student.prototype = new Person();
Student.prototype.constructor = Student;

var stu = new Student('feng', 18, '男', 100);
console.log(stu);

构造函数的原型方法继承:拷贝继承(for-in)

function Person (name, age) {
  this.type = 'human'
  this.name = name
  this.age = age
}

Person.prototype.sayName = function () {
  console.log('hello ' + this.name)
}

function Student (name, age) {
  Person.call(this, name, age)
}

// 原型对象拷贝继承原型对象成员
for(var key in Person.prototype) {
  Student.prototype[key] = Person.prototype[key]
}

var s1 = Student('张三', 18)

s1.sayName() // => hello 张三

另一种继承方式:原型继承

function Person (name, age) {
  this.type = 'human'
  this.name = name
  this.age = age
}

Person.prototype.sayName = function () {
  console.log('hello ' + this.name)
}

function Student (name, age) {
  Person.call(this, name, age)
}

// 利用原型的特性实现继承

Student.prototype = new Person()

var s1 = Student('张三', 18)

console.log(s1.type) // =>human

s1.sayName() // =>hello 张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值