直接贴代码,注释里面写的很清楚,如果对一些基本概念不了解,建议学习《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设计模式》一书;