1.传统形式-->原型链
- 过多的继承了多用的属性
2.借用构造函数
function Person(name,age,sex){ this.name=name; this.age=age; this.sex=sex;}function Student(name,age,sex,grade){ Person.call(this,name,age,sex); this.grade=grade;}var student=new Student();复制代码
- 不能继承借用构造函数原型
- 每次构造函数都要多走一个函数
3.共享原型
Father.prototype.lastName="du";function Father(){ }function Son(){ }function inherit(Target,Origin){ Target.prototype=Origin.prototype;//Son和Father的原型会指向同一个,会相互影响}inherit(Son,Father);var son=new Son;//顺序不能变动复制代码
- 不能随便改动自己的模型,原型指向一样,会互相影响。
4.圣杯模式
function inherit(Target,Origin){ function F(){};//利用F作为一个中间层Son既可以改变自己的原型,又不会影响Father的原型 F.prototype=Origin.prototype; Target.prototype=new F(); Target.prototype.constructor=Target;//将Target的构造函数指向自己,否则会指向Origin Target.prototype.uber=Origin.prototype;//uber类似于一个super,快速的帮你找到直接的原型}Father.prototype.lastName="du";function Father(){ }function Son(){ }inherit(Son,Father);var son=new Son();var father=new Father();//类似功能另外一种写法var inherit=(function(){ var F=function(){};//变成了私有化变量 return function(Target,Origin){ F.prototype=Origin.prototype; Target.prototype=new F(); Target.prototype.constructor=Target; Target.prototype.uber=Origin.prototype; }}());//形成了一个闭包复制代码