首页 > 代码库 > javascript 封装 构造函数继承 非构造函数继承

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);

javascript 封装 构造函数继承 非构造函数继承