继承方法一: 一个构造函数可以继承一个实例化对象里面的属性和方法 例如: var p1=new wo(); //先实例 (父) ni.prototype=p1; //(实例化的父赋值给构造函数的儿子)之后把p1的属性和方法, 都放到ni构造函数的原型对象中,这样构造函数就继承了p1里面的属性和方法 var p2=new ni(); //之后实例化对象用的是ni构造函数的都继承了 p1里面的属性和方法 继承方法二: var p1=new wo(); var p2=new ni(); p2.__proto__=p1; //p2同样也继承了p1,但是 单单只有实例化p2继承p1里面的属性方法。 以上两个方法,具体情况具体使用。 alert(p3 instanceof wo); // p3这个实例对象里面有没有指向wo这个构造函数 以上的继承有一个问题就是不能传参数,所以我们使用对象冒充来继承。例如: function Box(name.age){ this.name=name; this.age=age; } function Desk(){ Box.call(this,name,age); // Desk冒充Box构造函数 } 参数的问题解决了又来一个新的问题就是如果Box有原型属性方法的话,Desk冒充只能得到实例的属性和方法 并不能冒充得到原型的属性方法。解决就是使用继承方法一中的方法,ni.prototype=p1; 将父亲实例化后赋值给儿子的构造函数即可,例如: function Box(name.age){ this.name=name; this.age=age; } Box.prototype.sex='男'; function Desk(){ Box.call(this,name,age); // Desk冒充Box构造函数 } Desk.prototype=new Box(); //将父亲实例化后赋值给儿子的构造函数,这样儿子冒充父亲不仅可以使用父亲的 实例属性和方法也可以使用父亲的原型属性和方法了,继承推荐使用 对象冒充+原型链继承。