js基础系列(1)----原型链

今天重新回顾了一下js的基础知识,感觉自己的基础还是不牢固,很多东西都忘记了.就此每天抽出时间来复习一下js的一些基础知识.

js原型链

js只有一种结构:对象.每个实例对象(object)都有一个私有属性( __ proto __),指向他的构造函数的原型对象( prototype ).该原型对象也有一个自己的原型对象( __ proto __),层层向上,直到一个对象的原型对象为null.根据定义,null没有原型,并且作为定义的最后一环.

我的理解里面就是:定义的一个函数(f()),在创建一个对象(o)

function f(){
	this.a = 1;
	this.b = 2;
}
let o = new f(); // a=1;b=2

再在f函数的原型上定义属性:

f.prototype.b = 3;
f.prototype.c = 4;

不要再原型链上直接定义 f.prototype = {b:3,c:4};这样会直接打破原型链.
最后其原型链应该为:
{a:1, b:2} —> {b:3, c:4} —> Object.prototype—> null

console.log(o.a); // 1
// a是o的自身属性吗?是的,该属性的值为 1

console.log(o.b); // 2
// b是o的自身属性吗?是的,该属性的值为 2
// 原型上也有一个'b'属性,但是它不会被访问到。
// 这种情况被称为"属性遮蔽 (property shadowing)"

console.log(o.c); // 4
// c是o的自身属性吗?不是,那看看它的原型上有没有
// c是o.[[Prototype]]的属性吗?是的,该属性的值为 4

console.log(o.d); // undefined
// d 是 o 的自身属性吗?不是,那看看它的原型上有没有
// d 是 o.[[Prototype]] 的属性吗?不是,那看看它的原型上有没有
// o.[[Prototype]].[[Prototype]] 为 null,停止搜索
// 找不到 d 属性,返回 undefined
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值