zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    自定义asp.net mvc Filter 过滤器
    基于委托的C#异步编程的一个小例子 带有回调函数的例子
    ASCII、Unicode和UTF-8编码的区别
    Specification模式的一个不错的示例代码
    codesmith 自动生成C# model 实体模板
    Quartz.NET 实现定时任务调度
    FtpHelper类匿名获取FTP文件
    crc32 根据字符串获取校验值
    机器学习能做什么
    RunHelper,一个为跑步而设计的开源的android app
  • 原文地址:https://www.cnblogs.com/FashionDoo/p/10602771.html
Copyright © 2011-2022 走看看