什么是原型链
原型链(prototype chain)是 JavaScript 中对象之间的一种关系模型。每个对象在创建时都与一个原型对象相关联,通过这种关联,对象可以继承原型对象上的属性和方法。
在 JavaScript 中,每个对象都有一个内部属性 [[Prototype]](可以通过 __proto__ 访问),它指向该对象的原型。原型本身也是一个对象,同样具有 [[Prototype]] 属性,这样就形成了一个原型链。
当我们访问一个对象的属性或方法时,JavaScript 引擎首先会在对象本身查找,如果找不到,它会继续沿着原型链向上查找,直到找到该属性或方法或者到达原型链的顶端(null)为止。
图解:

如何用原型链去写数组的高阶排序方法
思路:
要借用原型链来补充数组的高阶排序方法,可以去扩展数组的原型,并添加自定义的排序方法。
示例代码:
// 定义自定义的排序方法
Array.prototype.customSort = function(compareFunc) {
// 使用Array.prototype.sort方法并传入自定义的比较函数
return this.sort(compareFunc);
};
// 使用示例
const arr = [5, 2, 8, 1, 4];
const aSort = arr.customSort((a, b) => a - b);
console.log(ascendingSorted); // 输出: [1, 2, 4, 5, 8]
const bSort = arr.customSort((a, b) => b - a);
console.log(descendingSorted); // 输出: [8, 5, 4, 2, 1]
在示例代码中, 是将自定义的排序方法 customSort 添加到了 Array,prototype 中
将其作为数组对象的一部分, 这样做可以让所有的数组实例都能直接的去调用 customSort 方法
此方法接受一个比较函数作为参数, 然后用内置的 Array.prototype.sort 方法去执行排序操作
可以根据需要传入不同的比较函数来实现升序或降序排序
扩展:
1. 什么是Array.prototype.sort方法
是 JavaScript 数组对象的内置方法,用于对数组元素进行排序。它会修改原数组,将其重新排序,并返回排序后的数组。
示例:
const arr = [5, 2, 8, 1, 4];
arr.sort();
console.log(arr); // 输出: [1, 2, 4, 5, 8]
这里调用了 arr 数组的 .solt() 方法 会按照默认的字典顺序对数组重新排序 并且返回的结果会直接修改原数组
2. 什么是自定义的比较函数
是一种在 JavaScript 中用于排序的函数,它被传递给排序方法
在 Array.prototype.sort() 中来指定元素之间的比较规则
比较函数接受两个参数,通常表示数组中的两个元素,然后根据特定的比较逻辑返回一个数字,该数字指示这两个元素的顺序关系。具体来说:
- 如果比较函数返回一个负数,表示第一个元素应该在第二个元素之前。
- 如果比较函数返回一个正数,表示第二个元素应该在第一个元素之前。
- 如果比较函数返回 0,表示这两个元素的顺序相同,它们可以在排序后的数组中保持原来的相对顺序。
通过自定义比较函数,你可以定义你希望的排序规则,例如按照数字大小、字符串长度、自定义对象属性等进行排序。
示例:
arr.sort((a, b) => a + b); // 代表倒序排列(大数在前)
arr.sort((a, b) => a - b); // 代表正序排列(小数在前)
arr.sort((a, b) => a.length - b.length); // 代表按照字符串长堵排序(短的在前)
原型链是JavaScript中对象间的一种关系,允许对象继承原型对象的属性和方法。每个对象有[[Prototype]]属性,可以通过__proto__访问。当访问对象属性时,JavaScript会沿原型链查找。示例展示了如何扩展Array.prototype,添加customSort方法,接受比较函数以实现自定义排序,如升序或降序。Array.prototype.sort是内置排序方法,会修改原数组。自定义比较函数定义了元素间的比较规则,返回值决定排序顺序。
7000





