Javascript继承(暂略去中转函数、组合继承和寄生继承)

  继承,在JS中通过原型链实现。如:

function Box(){
    this.name="Lee";
}

function Desk(){
    this.age=100;
}

//通过原型链继承,超类实例化的对象赋值给子类的原型
Desk.prototype=new Box();
var desk=new Desk();
alert(desk.name);

  这样,Desk的原型得到了Box的实例对象+对象信息,形成了原型链。

  继承遵循就近原则,子类继承父类就近的属性。如: 

function Box(){
    this.name="Lee";
}
//添加原型属性name
Box.prototype.name="Jack";

function Desk(){
    this.age=100;
}

Desk.prototype=new Box();
var desk=new Desk();
alert(desk.name);    //实例里有,则返回;没有,则去原型链里找

//子类型从属于自己或它的超类型alert(desk instanceof Desk);

alert(desk instanceof Box);
 

  关于采用对象冒充和原型链继承的组合,来解决构造方法传参和原型共享问题,以后再来进一步学习。

时间: 2024-10-09 19:20:25

Javascript继承(暂略去中转函数、组合继承和寄生继承)的相关文章

Javascript 组合继承 原型链继承 寄生继承

Javascript继承通常有三种方式. 第一种:组合式继承: function SuperType(name) { this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function() { console.log(this.name); }; function SubType(name, age) { //通过ca

继承有类式继承,构造函数继承人,组合继承

1:类式继承: // 声明父类 function Parent(){ this.parentValue = true; } // 为父类添加共有方法 Parent.prototype.getParentValue = function(){ return this.parentValue; } // 声明子类 function Child(){ this.childValue = false; } // 继承父类 Child.prototype = new Parent(); // 为子类添加共

应该是叫寄生继承模式 JavaScript的继承 Class

//JavaScript面向对象编程 var Class=function(){ } Class.extend=function(props){ //继承父类 var prototype=Object.create(this.prototype) //初始化函数ctor var _Class=function(){ if (this.ctor) this.ctor.apply(this, arguments); } //当前类属性和方法 for(var k in props){ prototyp

类的继承、派生、组合、菱形的继承、多态

类的继承 继承是一种新建的类的方式,新建的类成为子类,被继承的类称为父亲 继承的特性是:子类会遗传父亲的属性 继承是类与类之间的关系 使用继承目的,可以减少代码的咒余 在python中,父类和子类只有在继承的时候才会产生 继承是为了拿到父类的所有东西 class Parent_Foo: def __init__(self,first_name,money,car,house) self.first_name = first_name self.car = car self.house =hous

绝不又一次定义继承而来的函数的缺省參数值

首先.此处的函数指的是 virtual 函数,为什么不是non-virtual函数呢?是由于在public继承中.non-virtual函数表示派生类是须要继承其接口与其强制实现的. 假设你的Derived已经在考虑重写non-virtual函数了.那么你是应该好好审视一下,在此处使用 public继承是否合理了. 因此.本文仅仅解说virtual函数的缺省參数值,比如以下的代码: 在C++代码中,函数的參数值是静态绑定的.而通过基类的指针或者引用对virtual函数调用的动态绑定的. 因此.当

【OC学习-13】什么是组合,它和继承是什么关系?

继承有两缺点:(1)当层级越来越多时,假如每一个层级都有实例变量,那么最下层的子类继承的实例变量会超级多,沉重.(2)当消息传递自子类往上时.层级越多,效率越低下. 所以就有了组合.说实话区分继承和组合真不是那么easy.所谓两者是"is a"关系则是继承,两者是"has a"则是组合,还是模糊.事实上.这两个概念无须区分十分明显,仅仅须要记住:a)组合和继承实现的功能几乎相同,可是实现的形式不一样,记住各自的形式就可以:b)尽量用组合. 很多其它差别详见:http

C++里的继承和多态(下)——单继承、多继承、菱形继承(含虚拟函数的继承)

1.带有虚函数的类 class Base { public:                  virtual void FunTest1()                 {                                 cout << "Base::FunTest1()" << endl;                 }                  virtual void FunTest2()                 

Javascript面向对象编程(三):非构造函数的继承

作者: 阮一峰 日期: 2010年5月24日 这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承". 今天是最后一个部分,介绍不使用构造函数实现"继承". 一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese = { nation:'中国' }; 还有一个对象,叫做"医生". var Doctor ={ career:'医生

含有虚函数菱形的虚拟继承(没有对虚函数进行重写)

在VS2013编程,调试 问题 :  菱形继承会引来,二义性 1.源代码 </pre><pre name="code" class="cpp">#include <iostream> using namespace std; class Base { public: virtual void FunTest() { cout << "Base::FunTest () " << endl;