一.原型
Object.prototype 属性表示object的原型对象。
当访问一个对象的属性时,它不仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。null 没有原型,并作为这个原型链中的最后一个环节。
let f=function(){this.a=1;this.b=2;}
let o=new f();// {a: 1, b: 2}// 在f函数的原型上定义属性
f.prototype.b=3;
f.prototype.c=4;
console.log(o.a);// 1
console.log(o.b);// 2
console.log(o.c);// 4 属性遮蔽
console.log(o.d);//undefined
二.继承
var o={a:2,m:function(){returnthis.a+1;}};
console.log(o.m());// 3// 当调用 o.m 时,'this' 指向了 o.
var p=Object.create(o);// p是一个继承自 o 的对象
p.a=4;// 创建 p 的自身属性 'a'
console.log(p.m());// 5
// 调用 p.m 时,'this' 指向了 p
// 又因为 p 继承了 o 的 m 函数
// 所以,此时的 'this.a' 即 p.a,就是 p 的自身属性 'a'
三.原型链
1.varo={a:1};
原型链: o ---> Object.prototype ---> null
2.vara=["yo","whadup","?"];
(Array.prototype 中包含 indexOf, forEach 等方法)
原型链: a ---> Array.prototype ---> Object.prototype ---> null
3.函数都继承于 Function.prototype
(Function.prototype 中包含 call, bind等方法)