Js的对象继承

JS的对象继承需要用到prototype,但是也有多种方式.大概测试了一些.方便以后查用.
//定义class1
function class1(){
    //构造函数
}
//定义class1的成员
class1.prototype={
    method:function(){
          console.log(1);
    }
}
//定义class2
function class2(){
    //构造函数
}
//让class2继承于class1
class2.prototype= class1.prototype;
//千万不要这样用,这样会同时覆盖到class1的方法
class2.prototype.method=function(){
    console.log(2);
}

//定义class2
function class3(){
    //构造函数
}

//让class3继承于class1,用new出一个对象
class3.prototype= new class1();
//给class2重复定义方法method
class3.prototype.method=function(){
    console.log(3);
}

//定义class4,还是继承class1
function class4() {  
    class1.call(this);
}
Object.setPrototypeOf(class4.prototype, class1.prototype);
class4.prototype.method=function(){
    console.log(4);
}

//创建两个类的实例
var obj1=new class1();
var obj2=new class2();
var obj3=new class3();
var obj4=new class4();
//分别调用两个对象的method方法
obj1.method();
obj2.method();
obj3.method();
obj4.method();

程序输出为:
2
2
3
4

可以看出,第一种class2.prototype= class1.prototype仅仅是把两个原形直接赋值相等,这样若再修改子类,就会"污染"到父类.
而其他方法则比较安全.

你可能感兴趣的:(Js的对象继承)