JavaScript 继承

JavaScript实现继承的几种方式

原型链最基本的一种继承--过多继承了没用的属性

复制代码
 1 Grand.prototype.lastName = "Deng";
 2         function Grand() {
 3 
 4         }
 5         var grand = new Grand();
 6 
 7         Father.prototype = grand;
 8         function Father() {
 9             this.name = "123";
10             this.fortune={
11                 a:123
12             }
13         }
14         var father = new Father();
15 
16         Son.prototype = father;
17         function Son() {
18             this.hobbit="smoke";
19 
20         }
21         var son = new Son();
View Code
复制代码

借用构造函数实现继承  -- 每次构造函数都要多走一个函数 无法继承借用构造函数的原型

复制代码
  function Person(name,age,sex){
            this.name=name;
            this.age=age;
            this.sex=sex;

        }
        function Student(name,age,sex,grade){
            Person.call(this,name,age,sex);
            this.grade=grade;
        }
        var student = new Student("a",12,1,1);
View Code
复制代码

共享原型---不能随便改动自己的原型

复制代码
Father.prototype.lastName="Deng"
        function Father(){

        }

        function Son(){

        }
        未封装
        Son.prototype=Father.prototype;
        var son = new Son();
        var father = new Father();
View Code
复制代码

我们对共享原型模式加以封装改造

复制代码
function Father() {

        }

        function Son() {

        }
        //target 继承 origin
        function inherit(Target, Origin) {
            Target.prototype = Origin.prototype
        }
        //必须先继承后用
        inherit(Son, Father);
        var son = new Son();
View Code
复制代码

圣杯模式(较好的继承实现,一般采用此方式)

复制代码
// function inherit(Target, Origin) {
        //     function F() {};
        //     F.prototype = Origin.prototype;
        //     Target.prototype = new F();
        //     Target.prototype.constructor = Target;
        //     Target.prototype.uber = Origin.prototype;
        // }
        //比较专业的写法
        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;
            }
        }());
        Father.prototype.lastName = "Deng"

        function Father() {

        }

        function Son() {

        }
        inherit(Son, Father);
        var son = new Son();
        var father = new Father();
View Code
复制代码

 

posted @   110来了  阅读(144)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示