继承与原型链

2020-07-21  本文已影响0人  夕阳不西下_

一.原型

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等方法)

上一篇 下一篇

猜你喜欢

热点阅读