JavaScript继承

1、传统继承形式 ——>原型链继承

  缺陷:过多的继承了没用的属性

function SuperType() {
     this.property = true;
}
SuperType.prototype.getSuperValue
= function() { return this.property; } function SubType () { this.property = false; ) //继承superType SubType.prototype = new SuperType(); //添加新的方法 SubType.prototype.getSubValue = function() { return this.property; } //重写超类中的方法
SubType.prototype.getSuperValue = function() {
  return false;
}
var instance = new SubType(); console.log(instance.getSuperValue) //false

2、借用构造函数

  不足:不能继承借用构造函数的原型;每次构造函数都多走一个函数

function SuperType(name, age) {
  this.name = name;
  this.age = age;
}
function SubType(name, age, gender){
  SuperType.call(this, name, age);
  //SuperType.apply(this, [name, age]);
  this.gender = gender;
}
var instance = new SubType("huang", 18, "male");

console.log(instance.name)  //"huang"
console.log(instance.gender)  //"male"

3、圣杯模式

var inherit = (function() {
  var F = function() {};
  return function(Target, Origin) {
    F.prototype = Origin.prototype;
    Target.prototype = new F();
    Target.prototype.constructor = target;
    Target.prototype.uber = Origin.prototype;
  }
}())

***方法

 1、obj.hasOwnProperty(property)   判断对象是否有某个属性

 2、obj instanceof super  判断obj的原型链上是否存在super

 3、Object.create(原型)

    var obj = Object.create(null)  //这样构造的对象原型链为空

posted @ 2018-10-02 10:58  0恋晨曦0  Views(94)  Comments(0Edit  收藏  举报