继承模式(圣杯模式)
继承的发展史
- 传统形式–> 原型链
过多的继承了没用的属性 - 借用构造函数
不能继承借用构造函数的原型
每次构造函数都要多走一一个函数(通过call来改变this的指向)
function Person(age,name,sex){
this.age = age;
this.name = name;
this.sex = sex;
}
function Student(age,name,sex,grade){
Person.call(this,age,name,sex)
this.grade = grade;
}
var student = new Student(20,'xiaozhao','male',18);
console.log(student);
- 共享原型
不能随便改动自己的原型(son的protptype和father的prototype是一样的原型)
Father.prototype.lastName = 'deng';
function Father(){
}
var father = new Father();
function Son(){
}
function inherit(Target,Origin){
Target.prototype = Origin.prototype;
}
inherit(Son,Father);
var son = new Son();
console.log(son.lastName);
注意事项:继承必须在new之前,否则的话木已成舟。
4. 圣杯模式
Father.prototype.lastName = 'deng';
function Father(){
}
var father = new Father();
function Son(){
}
function inherit(Target,Origin){
function F(){}
F.prototype = Origin.prototype;
Target.prototype = new F();
}
inherit(Son,Father);
var son = new Son();
console.log(son.lastName);
标准的圣杯模式
//圣杯模式
function inherit(Target, Origin) {
function F() {};
F . prototype = 0rigin. prototype;
Target. prototype = new F();
Target. prototype. constuctor = Target;
Target. prototype. uber = 0rigin. prototype ;
}
命名空间
功能:管理变量,防治污染全局,实现模块化开发。