继承是面向对象的基本特征,其目的就是复用(无论是代码还是内存),其基本特征就是父类的方法与子类继承的方法为同一个方法

导航

原生的继承的方式-->模式下的继承方式-->瞎bb

原生的继承的方式

  大神Brendan Eich设计脚本语言javascript时,认为他是一种简单的脚本语言,吸收了面向对象的方式,但没有引用类的概念(都类了,能简单吗),至于继承的概念,则通过万能的"分层"思想进行处理

1.如何创建对象

  Java语言都使用new命令来生成实例。javascript吸收了new命令,以此从原型对象中创建新的实例,但Javascript没有"类",怎么来表示原型对象呢?大神很机智的发现,java使用new命令后跟的都是类的构造函数,因此javascript拥有构造函数却没有类的概念,而一个非常简单的设计方式就出来了

function Dog(name){
  this.name= name;
}

这是一个构造函数,对构造函数使用new就可以创建一个对象,而构造函数中的this则代表其自身,就这么简单

2.对象的继承

创建出来的实例对象自然应该是独立,且分开的,但对于公共部分,共享才是唯一的出路,经典的分层思想就在这里,只要将共享的部分提出来,所有的实例化对象在指向共享引用就可以了,此时大神加入了prototype属性

function Dog(name){
  this.name= name;
}
Dog.prototype.species="犬科";

prototype指向的就是公共部分,Person中的this,表示的是实例中的对象,至此,javascript中的继承就已经完整的设计好了

模式下的继承方式

只要知道构造函数与prototype属性就已经掌握了javascript中的继承原理,不过这原理好像是创建原型以后,在创建父类的引用,缺少类概念的javascript又该如何让两个对象进行关联呢?

function Dog(name){
  this.name= name;
}
function Animal(species){
    this.species=species;//"动物种类"
}
Animal.prototype.getSpecies=function(){
    return this.species;
}

 

大神只设计了加减法,至于乘除就没有做太深的设计,需要开发人员进行简单的配合,当然我们的目的很明确,要让子类的prototype指向父类,如果可以的话需要一种不修改2个对象的方式

函数绑定

类似于super的方式

 

function Dog(name){
     Animal.apply(this, "犬科");
  this.name= name;
}

 

1.修改了Dog的内部对象

prototype

强势修改

Dog.prototype = new Dog();    
Dog.prototype.constructor =Dog;

 

posted on 2015-01-18 17:01  Glimis  阅读(99)  评论(0编辑  收藏  举报