function inhert(Target,Origin){
function F(){};
F.prototype = Origin.prototype;
Target.prototype = new F();
Target.prototype.constructor = Target;//更正Target上正确的构造方法
Target.prototype.uber = Origin.prototype//指向他的超类(继承自谁)
}
Father.prototype.lastName = 'Zhang'
function Father(){}
function Son(){}
inhert(Son,Father);
var son = new Son();
解析:
当不借助一个空的构造函数时,即直接Target.prototype = Origin.prototype; 当Taget.prototype改变时会改变Origin.prototype的,因为它们指向同一祖先。
当借助一个新的构造函数时F();
F.prototype = Origin.prototype;//F原型继承Origin原型
Target.prototype = new F(); 这句的精妙之处在于:
var f = new F(); f.__proto__指向F.prototype;
当Target.prototype上属性改变时,会随之改变f上的属性,并不影响f.__proto__,也就不会影响F.prototype
自然不会影响Oringin.prototype
反之,当Origin.prototype上的属性改变时,会改变F.prototype的属性,随之改变f.__proto__的属性,也就改变了F.prototype。
也就实现了Target继承Origin,且Origin不会被随意更改。