JavaScript 圣杯模式笔记

<!-- <script>
            //extend   inherit(Target,Origin)
            //inherit使用

            Father.prototype.lastName = 'He';
            function Father() {}
            function Son() {}
            function inherit(Target, Origin) {
                Target.prototype = Origin.prototype;
            }
            inherit(Son, Father);
            var son = new Son();
            //inherit不足,Son和Father的原型指向的同一个,当Son原型改动时Father也会变化
        </script> -->

        <script>
            //圣杯模式
            Father.prototype.lastName = 'He';
            function Father() {}
            function Son() {}
            //常用写法
            // function inherit(Target, Origin) {
            //     function F() {}
            //     F.prototype = Origin.prototype;
            //     Target.prototype = new F();
            //     Target.prototype.constuctor = Target;
            //     Target.prototype.uber = Origin.prototype;
            // }
            //这种圣杯模式的本质在于,中间生成了一个对象,起到了隔离的作用,今后为Son.prototype添加属性时,全部都会加在这个对象里面,所以不会对父级产生影响。而向上查找是沿着__proto__查找,可以顺利查找到父级的属性,实现继承。

            //利用闭包将F作为一个私有化变量写法
            var inherit = (function () {
                var F = function () {};
                return function (Target, Origin) {
                    F.prototype = Origin.prototype;
                    Target.prototype = new F();
                    Target.prototype.constuctor = Target;
                    Target.prototype.uber = Origin.prototype; //真正继承自Origin
                };
            })();

            inherit(Son, Father);
            Son.prototype.name = 'jun';
            var son = new Son();
            var father = new Father();
        </script>
posted @ 2020-12-06 16:00  Vuex_Joe  阅读(77)  评论(0)    收藏  举报