js继承 圣杯模式及其高级方法:
为了防止后代影响到父亲的参数,使用一个构造函数来起过渡作用,即代码中的 Target.prototype = new F();
这样即使Target.prototype传入一个参数,影响的也只是F()这个构造函数,而不会影响到F()的原型。
<script>
//圣杯模式标准方案
function inherit(Target , Origin){
function F(){};
F.prototype = Origin.prototype;
Target.prototype = new F();
Target.prototype.constuctor = Target; //由于继承了Origin,target的结构体变成了Origin的,所以要重新赋值,做自己
Target.prototype.uber = Origin.prototype; //设置uber 当想知道继承自谁时,直接调用即可
}
Father.prototype.name = 'du';
function Father() {
}
function Son(){
}
inherit (Son,Father);
var son = new Son();
var father = new Father();
//雅虎提出的方法 让用于过渡的F()成为继承函数的私有化变量
/*var inherit = (function () {
var F = function () {}; //形成闭包,私有化F
return function(Target , Origin){
F.prototype = Origin.prototype;
Target.prototype = new F();
Target.prototype.constuctor = Target;
Target.prototype.uber = Origin.prototype;
}
}());
*/
</script>