在 JavaScript 中,每个对象都有一个原型对象,也可以称之为原型。对象的原型是一个普通的对象,它包含了当前对象所继承的属性和方法。当我们访问一个对象的属性或方法时,如果在该对象本身找不到需要的属性或方法,就会通过原型链向上查找,直到找到为止。
例如,我们可以通过创建一个 Person 构造函数来创建多个实例,每个实例都有自己的姓名和年龄数据,但是所有实例都可以通过原型链访问到共享的方法,如 Person.prototype.sayHello()。
下面是一个简单的示例代码,用来展示原型和原型链的概念:
// 定义一个构造函数 Person function Person(name, age) { this.name = name; this.age = age; } // 在 Person.prototype 上定义一个共享的方法 sayHello Person.prototype.sayHello = function() { console.log(`Hello, my name is ${this.name}.`); } // 创建一个 person1 实例 const person1 = new Person('Tom', 18); // person1 可以访问到自己的属性和方法 console.log(person1.name); // Tom console.log(person1.age); // 18 person1.sayHello(); // Hello, my name is Tom. // person1 也可以通过原型链访问到共享的方法 console.log(person1.hasOwnProperty('sayHello')); // false,这个方法不是 person1 自己的属性 console.log(Person.prototype.hasOwnProperty('sayHello')); // true,这个方法是定义在 Person.prototype 上的
在这个示例中,我们定义了一个 Person 构造函数,并在其原型对象 Person.prototype 上定义了一个共享的方法 sayHello。我们通过创建 person1 实例来演示,它既可以访问到自己的属性和方法,也可以通过原型链访问到共享的方法。
总的来说,原型和原型链是 JavaScript 中的一个重要机制,它们使得对象之间可以相互继承和共享数据和方法。