Javascript中的圣杯模式继承

实现继承的方式有很多种,比如:通过原型链方式、call/apply方式、共享原型、圣杯模式实现继承。这里主要介绍圣杯模式。其主要思想是利用一个临时函数作为中间层以及原型链的方式实现继承。

        Origin.prototype.value = 'origin';
        function Origin() {
        }
        function Target() {
        }
        inherit(Target, Origin);
        var target = new Target();
        console.log(target.value, Target.prototype.constructor);

        function inherit(Target, Origin) {
            function F() { };
            F.prototype = Origin.prototype;
            Target.prototype = new F(); //Target.prototype.__proto__--->Origin.prototype
        }

执行上面的代码可以看到打印出了

origin ƒ Origin() {
        }

我们可以发现,target访问到了Origin.prototype上的属性,实现了继承,但是却发现Target.prototype.constructor却是Origin,所以我们来优化一下方法

//圣杯模式
        function inherit(Target, Origin) {
            function F() { };
            F.prototype = Origin.prototype;
            Target.prototype = new F(); //Target.prototype.__proto__--->Origin.prototype
            Target.prototype.constructor = Target;
            Target.prototype.uber = Origin.prototype;//让Target知道究竟继承自谁
        }

再来优化一下:

//利用立即执行函数以及闭包实现
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;
            }
        }());
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值