手记

【学习打卡】第六天 数据结构和算法

链表 & JS原型链

JS原型链类似于链表,不同的是链表使用next连接;JS原型链用__proto__来连接。

原型链举例如下:
[对象] obj -> Object.prototype -> null
[函数] fun -> Function.prototype -> Object.prototype -> null
[数组] arr -> Array.prototype -> Object.prototype -> null

instanceof 的原理,并用代码实现
  • instanceof是JS中的一个操作符。
  • A instanceof B: A是否是B的原型,或者说B是否在A的原型链上
function instanceof(A, B) {
	let p = A;
	while(p) {
		if(p === B.prototype) {
			return true;
		}
		p = p.__proto__;
	}
	return false;
}
看看下面代码输出的结果
var foo = {},
	F = function(){};
Object.prototype.a = 'a';
Function.prototype.b = 'b';

console.log(foo.a);  // 'a'
console.log(foo.b); // undefined

console.log(F.a);  // 'a'
console.log(F.b);  // 'b'
  • 访问foo.a,先从foo对象上找,没找到,沿着原型链找到Object.prototype,发现有属性a,打印出 a
  • 访问foo.b,先从foo对象上找,没找到,沿着原型链没有找到b,打印出 undefined
  • 访问F.a,先从F上找,没找到,沿着原型链找到Object.prototype,发现有属性a,打印出 a
  • 访问F.b,先从F上找,没找到,沿着原型链找到Function.prototype,发现有属性b,打印出 b

使用链表指针获取JSON节点的值

如下,给出一个json数据,并给出查找的路径,获取json节点的值

const json = {
	a: {b: {c: 1}},
	d: {e: 2}
}
const path = ['a', 'b', 'c']

思路:遍历链表的方式

function getNode() {
	let p = json;
	path.forEach((key)=> {
		p = p[key]
	})
	return p;
}

0人推荐
随时随地看视频
慕课网APP