类式继承

直接贴代码,注释里面写的很清楚,如果对一些基本概念不了解,建议学习《javascript高级程序设计》,把最基本的概念弄懂,再来看这篇文章,高手请忽略!

贴代码:
    /*声明父类*/
function SuperClass() {
    this.superValue = true;
}
/*为父类添加共有方法*/
SuperClass.prototype.getSuperValue = function () {
    console.log(this.superValue);
};

/*声明子类*/
function SubClass() {
    this.subValue = false;
}
/*继承父类*/
SubClass.prototype = new SuperClass();

/*为子类添加共有方法*/
SubClass.prototype.getSubValue = function () {
    console.log(this.subValue)
};

var instance = new SubClass();
    console.log(instance instanceof SuperClass);//true
    console.log(instance instanceof SubClass);//true
    console.log(SubClass instanceof SuperClass);//false
    console.log(SubClass.prototype instanceof SuperClass);//true

这里声明了两个类,第二个类SubClass的prototype被赋值为第一个类SuperClass的实例。

2:如何使用:
var instance = new SubClass();
      //测试代码如下
    instance.getSubValue();//false
    instance.getSuperValue();//true
    console.log(instance instanceof SuperClass);//true
    console.log(instance instanceof SubClass);//true
    console.log(SubClass instanceof SuperClass);//false SubClass并不是SuperClass的实例
    console.log(SubClass.prototype instanceof SuperClass);//true
2.1:instanceof解释:

1:instanceof是通过判断对象的prototype链来确定这个对象是否是某个类的实例,而不关心对象与类的自身结构。
2:instanceof是判断前面的对象是否是后面对象的实例,并不是表示两者的继承关系。

4:类式继承的缺点

其一:由于之类通过原型prototype对父类实例化,继承了父类。如果父类的共有属性是引用类型,所有子类会共享。。
其二:子类实现继承是靠其原型prototype对父类的实例化实现的,因此是无法向父类传递参数的。

缺点的测试代码如下:

/*声明父类*/
function SuperClass() {
    this.books = ['javascript','html','css'];
}
/*声明子类*/
function SubClass() {}
/*继承父类*/
SubClass.prototype = new SuperClass();
/*声明两个实例*/
var instance1 = new SubClass();
var instance2 = new SubClass();
//向实例instance1添加php。
instance1.books.push('php')
console.log(instance1.books);//['javascript','html','css','php']
console.log(instance2.books);//['javascript','html','css','php']

推荐阅读张容铭的《JavaScript设计模式》一书;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,842评论 2 17
  • 博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...
    _Dot912阅读 1,449评论 3 12
  • 1、构造函数模式 [url=]file:///C:/Users/i037145/AppData/Local/Tem...
    横冲直撞666阅读 873评论 0 0
  • 我们在对象创建模式中讨论过,对象创建的模式就是定义对象模板的方式。有了模板以后,我们就可以轻松地创建多个结构相同的...
    csRyan阅读 915评论 0 7
  • 当医生给你开药材的时候,一定要睁大眼睛看,或许不知觉中,已经吃下来你永远都想不到的东西,怀了个不属于你的孩子。 笔...
    旁趣PUNCH阅读 519评论 0 0