公告

本次更新:

公告样式,参考自 VuePress-Reco

本博客只技术分享!


Skip to content
本站总访问量
本站访客数 人次
标签
javascriptfacetestgopythonHTML前端CSSvitepress

一、原型对象的概念与作用

原型对象的概念

在JavaScript中,每个函数都有一个prototype属性,这个属性指向函数的原型对象。原型对象是一个对象,它包含了可以由特定类型的所有实例共享的属性和方法。

原型对象的作用

  • 原型对象的主要作用是实现对象的继承。
  • 通过将方法和属性添加到原型对象上,所有实例对象都可以共享这些方法和属性,从而节省内存空间。

二、原型链的概念与举例

原型链的概念

原型链是指对象通过其原型属性相互连接形成的一条链。每个对象都有一个原型对象,原型对象本身也有一个原型对象,这样一直向上追溯,直到找到一个原型对象为null的对象为止,这条链就称为原型链。

原型链举例

js
class Person {
    name = "孙悟空"
    age = 18

    sayHello() {
        console.log("Hello,我是", this.name)
    }
}

const p = new Person()

onsole.log(p.__proto__.__proto__.__proto__)

三、函数的原型链是什么样子的?

在JavaScript中,函数也是对象,因此函数也有原型链。函数的原型链如下:

  • 函数对象本身
  • 函数对象的原型对象(Function.prototype)
  • Function.prototype的原型对象(Object.prototype)
  • Object.prototype的原型对象(null)
js
function Foo() {}

console.log(Foo.__proto__ === Function.prototype); // true
console.log(Function.prototype.__proto__ === Object.prototype); // true
console.log(Object.prototype.__proto__ === null); // true

四、Object的原型链是什么样子的?

Object是JavaScript中所有对象的基类,其原型链如下:

  • Object对象本身
  • Object.prototype
  • Object.prototype的原型对象33(null)
js
const obj = {};

console.log(obj.__proto__ === Object.prototype); // true
console.log(Object.prototype.__proto__ === null); // true

五、继承原理与原型对象关系

JavaScript中的继承是通过原型链实现的。当访问一个对象的属性或方法时,JavaScript引擎会首先查找该对象本身是否有该属性或方法。如果没有,则会沿着原型链向上查找,直到找到该属性或方法或到达原型链的顶端(null)。

六、原型对象修改举例

通过修改原型对象,可以为所有实例对象添加新的方法或属性。例如:

js
function Animal(name) {
    this.name = name;
}

Animal.prototype.speak = function() {
    console.log(this.name + ' makes a noise.');
};

const dog = new Animal('Dog');
dog.speak(); // 输出:Dog makes a noise.

Animal.prototype.speak = function() {
    console.log(this.name + ' barks.');
};

dog.speak(); // 输出:Dog barks.
txt
大部分情况下,我们是不需要修改原型对象
    注意:
        千万不要通过类的实例去修改原型
            1. 通过一个对象影响所有同类对象,这么做不合适
            2. 修改原型先得创建实例,麻烦
            3. 危险

处理通过__proto__能访问对象的原型外,
    还可以通过类的prototype属性,来访问实例的原型
    修改原型时,最好通过通过类去修改
    好处:
        1. 一修改就是修改所有实例的原型
        2. 无需创建实例即可完成对类的修改

    原则:
        1. 原型尽量不要手动改
        2. 要改也不要通过实例对象去改
        3. 通过 类.prototype 属性去修改
        4. 最好不要直接给prototype去赋值
本站访客数 人次 本站总访问量