zoukankan      html  css  js  c++  java
  • javascript 封装 构造函数继承 非构造函数继承

    1 封装   

    把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象

     1.1 简单封装:var cat1 = {}; // 创建一个空对象

        cat1.name = "大毛"; // 按照原型对象的属性赋值

        cat1.color = "黄色";

       1.2 构造函数Prototype模式

    Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。

    这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。

    function Cat(name,color){

        this.name = name;

        this.color = color;

      }

      Cat.prototype.type = "猫科动物";

      Cat.prototype.eat = function(){alert("吃老鼠")};

    生成实例 var cat1 = new Cat("大毛","黄色");

    2 构造函数继承

        2.1 利用空对象继承:

    function extend(Child, Parent) {

        var F = function(){};

        F.prototype = Parent.prototype;

        Child.prototype = new F();

        Child.prototype.constructor = Child;

        Child.uber = Parent.prototype;

      }

        2.1 拷贝继承

    function extend2(Child, Parent) {

        var p = Parent.prototype;

        var c = Child.prototype;

        for (var i in p) {

          c[i] = p[i];

          }

        c.uber = p;

      }

    3 非构造函数继承 (两个普通对象)

         3.1 object()方法

    function object(Father) {

        function F() {}

        F.prototype = Father;

        return new F();

      }

    使用: var Doctor = object(Chinese);//中国医生的例子

    然后加上对象本生 Doctor.career = '医生';

       3.2浅拷贝

    function extendCopy(p) {

        var c = {};

        for (var i in p) { 
          c[i] = p[i];
        }

        c.uber = p;

        return c;
      }

    使用: var Doctor = extendCopy(Chinese);

       3.3 深拷贝

    function deepCopy(p, c) {

        var c = c || {};

        for (var i in p) {

          if (typeof p[i] === 'object') {

            c[i] = (p[i].constructor === Array) ? [] : {};

            deepCopy(p[i], c[i]);

          } else {

             c[i] = p[i];

          }
        }

        return c;
      }

    使用:var Doctor = deepCopy(Chinese);

  • 相关阅读:
    词向量的发展
    拉格朗日对偶理解
    EM算法理解
    Xgboost理解
    GBDT理解
    深入理解KS
    PCA主成分分析理解
    SVM理解
    Python调用C++
    Linux opencv安装与编译
  • 原文地址:https://www.cnblogs.com/zoumin123/p/5877786.html
Copyright © 2011-2022 走看看