概念记忆
Object
为了不拗口,叫大O
A.__proto__
“的隐形原型”
A.prototype
“的原型对象”
A.constructor
“的构造函数”
关系
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又是函数。
继承公式
var prototype = Object.create(Person.prototype);
prototype.constructor = Child;
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;