[整理]JavaScript的继承之类式继承

来源:互联网 发布:js new image 编辑:程序博客网 时间:2024/05/16 18:27
为了让Author继承Personal,必须手工将Author的prototype设置为Person的一个实例,最后一个步骤是将prototype的constructor属性重设为Author(因为把prototype属性设置为Person的实例时,其constructor属性被 抹除了)。

继承优点

1.前海重复性的代码

2.并且发行量弱化对象间的耦合

继承方式

一、类式继承:在构造函数中,创建实例属性要使用关键字this。

      /**        * 定义Person(父类)       */function Person(name) {        this.name = name;}   Person.prototype.getName = function() {        return this.name;}      /**        * 继承方法       */      var extend = function(subClass, superClass) {                var F = function() {}        F.prototype = superClass.prototype;        subClass.prototype = new F();        subClass.prototype.constructor = subClass;                /**          * 下面这一段代码是和下面的(1)中是相等的         * 这段代码是解决在subClass中调用父类superClass的constructor中的方法         */        subClass.superClass = superClass.prototype;        if (superClass.prototype.constructor == Object.prototype.constructor) {                    superClass.prototype.constructor = subClass;        }      }            /**        * 定义Author类(子类)       */      function Author(name, book) {              // (1) Person.call(this,name);       Author.superClass.constructor.call(this, name);       this.book = book;      }            /** 本例不像先前那样手工设置prototype和constructor属性,而是通过在类声明之后(在向prototype添任何方法之前)       *  立即调用extend函数来达到同样的目的。唯一的问题是超类(Person)的名称被固化在了Author类的声明中。       */      extend(Author, Person);            /**        * Author的原型对象放到extend的后面       */      Author.prototype.getBook = function() {        return this.book;      }            Author.prototype.getName = function() {                var name = Author.superClass.getName.call(this);        return name;      }            /**       * 创建Author实现并调用getName方法       */  var p = new Author("Hello JavaScript");  alert(p.getName());

0 0
原创粉丝点击