js原型+原型链

1.1 什么是原型?

    概念:1.每一个函数都有一个prototype属性,即显示原型

            2.每一个实例对象都有一个__proto__属性,即隐式原型

           3.每一个实例对象的隐式原型__proto__属性,即执行自身构造函数的prototype

        4.每一个prototype原型都有一个constructor属性,指向它关联的够造函数

      

1.2怎么定义?

通常使用构造器(函数体)定义属性,使用原型对象(prototype)定义方法。

如此,构造器只包含属性定义,而方法则分装在不同的代码块,使代码更具可读性:

// 构造器内定义属性
function Fun(a, b) {
  this.a = a;
  this.b = b;
}

// 原型属性定义方法
Fun.prototype.c = function() {
  return this.a + this.b;
}

// etc...
注意,千万不要使用字面量方式来定义属性和方法,否则原有属性和方法会被重写:

function Fn() {};

// 定义属性
Fn.prototype.a = 1;
Fn.prototype.b = 2;

// 字面量定义方法,原型被重写,原有属性和方法被更新
Fn.prototype = {
  c : function() {
    return this.a + this.b;
  }
}

var foo = new Fn();
foo.c();  // NaN
foo.a;  // undefined
foo.b;  // undefined

1.3.三者之间的关系

js原型+原型链

 

上一篇:js原型,原型链(不断补充中)


下一篇:【设计模式从入门到精通】03-原型模式