📜  JavaScript原型(1)

📅  最后修改于: 2023-12-03 15:01:48.426000             🧑  作者: Mango

JavaScript原型

在 JavaScript 中,每个对象都有一个原型对象,它允许对象继承其属性。JavaScript 原型是面向对象编程中比较重要的一个知识点,本文将为读者介绍 JavaScript 原型。

创建对象

在 JavaScript 中,我们可以通过构造函数来创建一个对象。构造函数和普通函数类似,但是使用构造函数创建对象需要使用 new 运算符。以下是一个使用构造函数创建对象的示例:

function Person(name, age) {
  this.name = name;
  this.age = age;
}
var person1 = new Person('Tom', 20);
var person2 = new Person('John', 25);

在上面的示例中,我们使用了一个构造函数 Person,它包含两个参数 name 和 age。通过使用 new 运算符,我们可以创建两个不同的 Person 对象 person1 和 person2。

原型链

在 JavaScript 中的每个对象都有一个原型对象,它允许对象继承其属性。每个对象都有一个隐藏的属性(proto),它指向原型对象。原型对象也有一个 proto 属性,指向它的原型对象,这个指向形成了所谓的“原型链”(prototype chain)。

function Person(name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.hello = function() {
  console.log('Hello World!');
}

var person = new Person('Tom', 20);
person.hello();  // 'Hello World!'

在上面的代码中,我们向 Person.prototype 添加了一个 hello 函数,它可以被 person 对象访问。当我们调用 person.hello() 时,JavaScript 引擎会先查找 person 对象的属性,如果找不到就会向上一级的原型对象 Person.prototype 查找,以此类推。如果找到最后也没有找到该属性,则返回 undefined。

继承

通过原型链继承可以使一个对象的属性和方法被其它对象所继承。为了继承一个对象,我们需要指定该对象的原型对象为要继承的对象的实例。以下是一个使用原型链继承的示例:

function Animal(name) {
  this.name = name;
}
Animal.prototype.sayHello = function() {
  console.log('Hello, my name is ' + this.name);
}

function Dog(name, age) {
  Animal.call(this, name);
  this.age = age;
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

var dog = new Dog('Mike', 2);
dog.sayHello();  // 'Hello, my name is Mike'

在上面的代码中,我们先定义了一个 Animal 构造函数,它有一个名为 name 的属性和一个方法 sayHello,该方法用于输出对象的名字。我们又定义了一个 Dog 构造函数,该函数继承自 Animal,有一个附加的属性 age。在继承过程中,我们调用了 Animal 的构造函数,并设置了 Dog 的 prototype 为 Animal 的一个实例。

结尾语

JavaScript 原型是一种非常重要的面向对象编程概念,它让对象可以在原型链上获取属性和方法,并且可以通过继承机制使代码更加简洁和易于理解。希望本文能够对你有所帮助。