概念记忆

Object 为了不拗口,叫大O

A.__proto__“的隐形原型”

A.prototype “的原型对象”

A.constructor “的构造函数”

关系

原型之我见 - 图1

Person.prototype.constructor === Person

Person的原型对象的构造函数就是它自己。

Person.prototype.__proto__ == Object.prototype

person 的原型对象 的隐形原型 就是 大O的原型对象

Object.prototype.__proto__ === null

往上找属性成员:Person.a Person有没有a?没有,Person 的原型对象 有a?没有, Person 的原型对象 的隐形原型又没有a?没有,噢,已经是大O了,到头了 ,返回undefined。

函数不是“对象”,不是所有东西都能()执行

函数的判别标志,是否有构造函数?

函数/构造函数=类/原型对象的构造函数,对象是构造函数实例化之后的对象。大O是默认存在的对象,由于大O也有构造函数,大O又是函数。

继承公式

  1. var prototype = Object.create(Person.prototype);
  2. prototype.constructor = Child;
  3. Child.prototype = prototype;

私有公有:利用构造函数的隔离性

被继承的Person想要一个私有属性,就只在自己的构造函数中生成这个属性。这样一来,继承者使用的是自己的构造函数不是Person,也就没法使用这个私有属性。

实现类

```javascript function Person(name){ // 私有属性name,不共享 this.name = name
} // 共有属性sex,共享 Person.prototype.sex = “”;

function Child(name){ Person.call(this,name);//类似super }

// 实现继承 var prototype = Object.create(Person.prototype); prototype.constructor = Child; Child.prototype = prototype;