javascript 中的原型 & 原型链

原型

每个函数都有一个 prototype 属性,这个属性指向一个对象,这个对象就是原型对象。

  • 存放一些属性和方法
  • 这个对象是给实例对象使用的

尝试重写 push 方法

let arr = [1, 2, 3];
arr.push(4);
console.log(arr);
Array.prototype.mypush = function (...args) {
  let len = this.length;
  for (let i = 0; i < args.length; i++) {
    this[len + i] = args[i];
  }
  return this.length;
};
arr.mypush(5, 6);
console.log(arr);

__proto__ 属性

每个对象都有一个 __proto__ 属性,这个属性指向它的原型对象。

  • 这个属性指向他的原型对象

在这里插入图片描述

console.log(arr.__proto__ == Array.prototype);

原型链

当我们访问一个对象的属性时,如果这个对象本身没有这个属性,那么就会沿着__proto__向上查找,这个查找的过程形成的链条就叫做原型链。

原型链的特点:

  • 查找属性会沿着原型链一直向上查找,直到找到或者到达原型链的顶端(null)
  • 对象的 __proto__指向其构造函数的 prototype
  • 原型链的终点是 Object.prototype.__proto__=== null
  • 在这里插入图片描述

总结

  • 每个函数都有一个 prototype 属性,这个属性指向一个对象,这个对象就是原型对象。
  • 每个对象都有一个 __proto__ 属性,这个属性指向它的原型对象。
  • 当我们访问一个对象的属性时,如果这个对象本身没有这个属性,那么就会沿着__proto__向上查找,这个查找的过程形成的链条就叫做原型链。

猜你喜欢

转载自blog.csdn.net/qq_63358859/article/details/143364335