JavaScript学习笔记—原型对象

1. 访问一个对象的原型对象

(1)对象.__proto__
(2)Object.getPrototypeOf(对象)

一般用第二种,第一种不安全

2. 原型对象中的数据

(1)对象中的数据(属性、方法等)
(2)constructor(对象的构造函数)

注意: 原型对象也有原型,这样就构成了一条原型链,根据对象的复杂成都不同,原型链的长度也不同
p对象的原型链:p对象 --> 原型 --> 原型 --> null
obj对象的原型链:obj对象 --> 原型 --> null

3. 原型链
  • 读取对象属性时,会优先读对象自身属性
    如果对象中有,则使用,没有则去对象的原型中寻找
    如果原型中有,则使用,没有择取圆形的原型中寻找
    直到找到Object对象的原型(Object的原型没有原型(为null))
    如果依然没有找到,则返回undefined
  • 原型链,是找属性的链,找不到会返回undefined
  • 作用域链,是找变量的链,找不到会报错
class Person {
  name = "孙悟空";
  age = 18;

  sayHello(){
    console.log("Hello,我是", this.name);
  }
}
const p = new Person();
console.log(p);

/*
  访问一个对象的原型对象
    (1)对象.__proto__
    (2)Object.getPrototypeOf(对象)
  一般用第二种,第一种不安全
*/
//console.log(p.__proto__);
console.log(Object.getPrototypeOf(p) === p.__proto__);

const obj = {};
4. 原型的作用

  所有的同类型对象它们的原型对象都是同一个,也就意味着,同类型对象的原型链是一样的。
原型的作用:

  • 原型就相当于是一个公共的区域,可以被所有该类实例访问
  • 可以将该类实例中所有的公共属性(方法)统一存储到原型中,这样我们只需要创建一个属性,即可被所有实例访问

  在对象中有些直是对象独有的,像属性(name, age, gender等)每个对象都应该有自己的值,但是有些值对于每个对象来说都是一样的,像各种方法,对于一样的值没必要重复创建。
  JS中集成就是通过原型来实现的,当继承时,子类的原型就是一个父类的实例。

5. 修改原型
  • 通过类的prototype属性来访问或修改实例的原型
class Person {
  name = "孙悟空";
  age = 18;
  sayHello(){
   console.log("Hello,我是", this.name);
  }
}
Person.prototype.fly = () => {
  console.log("我在飞~~~");
}
posted @ 2023-01-18 22:37  程序员张3  阅读(36)  评论(0编辑  收藏  举报