js原型重构reduce
时间: 2023-07-06 21:43:09 浏览: 48
在 JavaScript 中,reduce() 是一个高阶函数,它接受一个回调函数作为参数,用于对数组中的每个元素进行操作并返回一个累加器的结果。在使用 reduce() 函数时,可以通过原型重构的方式来扩展其功能。
以下是一个示例代码:
```
Array.prototype.myReduce = function(callback, initialValue) {
let accumulator = initialValue === undefined ? undefined : initialValue;
for (let i = 0; i < this.length; i++) {
if (accumulator !== undefined) {
accumulator = callback.call(undefined, accumulator, this[i], i, this);
} else {
accumulator = this[i];
}
}
return accumulator;
}
```
在这个示例中,我们通过将 reduce() 函数添加到 Array 的原型中来扩展其功能。我们使用了类似于原始 reduce() 函数的实现方式,但是添加了一个新的参数 initialValue,用于设置初始累加器的值。
通过这种方式,我们可以像使用原始的 reduce() 函数一样使用自定义的 myReduce() 函数,并且可以将其用作数组的方法。
相关问题
js原型重构forEach和map
首先,我们需要理解原型链以及原型链中的方法。在 JavaScript 中,每个对象都有一个原型(prototype)指向另一个对象或 null。原型对象也可以有自己的原型,最终形成一个原型链。在原型链中,如果某个对象没有某个方法,它会去原型链中去查找该方法,直到找到该方法或者查找到原型链的末端为止。
现在我们来重构 forEach 和 map 方法。假设我们有一个数组 arr,我们可以通过以下代码给数组的原型链添加 forEach 和 map 方法:
```
Array.prototype.myForEach = function(callback) {
for (let i = 0; i < this.length; i++) {
callback(this[i], i, this);
}
};
Array.prototype.myMap = function(callback) {
const newArray = [];
for (let i = 0; i < this.length; i++) {
newArray.push(callback(this[i], i, this));
}
return newArray;
};
```
在上面的代码中,我们通过给 Array.prototype 添加 myForEach 和 myMap 方法,即可在数组上调用这两个方法。
使用示例:
```
const arr = [1, 2, 3, 4];
arr.myForEach((item, index, array) => {
console.log(item, index, array);
});
const newArr = arr.myMap((item, index, array) => {
return item * 2;
});
console.log(newArr);
```
通过上述代码,我们成功重构了 forEach 和 map 方法。
javascript 原型 原型链
在JavaScript中,每个对象都有一个隐藏的 `__proto__` 属性,它指向该对象的原型。原型是一个普通的对象,它包含了共享属性和方法。当我们访问一个对象的属性或方法时,JavaScript引擎会首先在该对象本身查找,如果找不到,则会沿着原型链向上查找,直到找到该属性或方法,或者到达原型链的顶端(Object.prototype)。这个原型链的过程就是通过 `__proto__` 属性来实现的。
例如,当我们创建一个实例对象 `teacher` 时,如果 `teacher` 对象本身没有 `teach()` 方法,JavaScript引擎会通过对象的 `__proto__` 属性查找到 `Teacher.prototype` 的显式原型上,如果 `Teacher.prototype` 仍然没有该方法,它会继续沿着 `Teacher.prototype.__proto__` 找到 `Person.prototype`,直到找到 `teach()` 方法并执行。这样就形成了一个原型链。
同时,可以注意到 `Object.prototype.__proto__` 的值为 `null`,即 `Object.prototype` 没有原型。所以在原型链中,当找到顶层原型还没有属性时,就会返回 `undefined`。
需要注意的是, `__proto__` 是一个非标准的属性,实际开发中不应该直接使用它。它只是内部指向原型对象 `prototype` 的一个指示器,我们应该使用 `Object.getPrototypeOf()` 或 `Object.setPrototypeOf()` 来访问和设置对象的原型。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [JS:原型和原型链](https://blog.csdn.net/elevenhope/article/details/122882582)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [JavaScript原型链(重要)](https://blog.csdn.net/liyuchenii/article/details/125957625)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]