JavaScript继承,寄生组合式继承

来源:互联网 发布:复杂网络 渗透模型 编辑:程序博客网 时间:2024/04/27 15:42
/** * 寄生组合式继承: * 使用寄生式继承来继承超类型的原型,然后将结果指定给子类型的原型 * 优点:高效率,它只调用了一次Supertype构造函数,避免了在prototype上面创建不必要的多余属性, * 同时,原型链还能保持不变 * 正常使用instanceof 和isPrototypeOf() * 普遍认为寄生组合式继承是引用类型最理想的继承方式 */function object(o){    function F(){}         //创建临时构造函数    F.prototype = o;       //将传入对象作为构造函数的原型    return new F();              //返回类型的新实例}function inheritPrototype(subType,superType){    var prototype = object (superType.prototype);  //创建对象    prototype.constructor = subType;                //增强对象    subType.prototype = prototype;                   //指定对象}function SuperType(name){    this.colors = ["red","bule","green"];    this.property = true;    this.name = name;}SuperType.prototype.getSuperValue = function(){    return this.property;}SuperType.prototype.sayName = function(){    console.log(this.name);}function SubType(name,age){    this.subproperty = false;    SuperType.call(this,name);      //另一种继承方式,构造函数    this.age = age;}//SubType.prototype = new SuperType();   //继承语法 ,原型继承// SubType.prototype.constructor = SubType;inheritPrototype(SubType, SuperType); SubType.prototype.sayColor = function(){//   console.log(this.colors);     return this.colors; }SubType.prototype.getSubValue = function() {  //通过原型链实现继承时,不能使用创建字面量创建原型方法,//                                                  这样做 会重写原型链    return this.subproperty;}SubType.prototype.getSuperValue = function(){    return false;}var person1= new SubType();console.log(person1.sayColor());
原创粉丝点击