2.对象继承

57 阅读3分钟

JavaScript中的对象原型

在JavaScript中,对象的原型是用作对象的父对象或基对象的对象。原型对象包含对象继承的属性和方法。

JavaScript中的每个对象都有一个称为prototype​ 原型的特殊属性,它引用了对象的原型。prototype​原型属性是在创建对象时自动创建和分配的,可以使用__proto__​属性或Object.getPrototypeOf()​方法访问。

例如,考虑以下代码:

let person = { name: "John"};
console.log(Object.getPrototypeOf(person) === person.__proto__); // Output: true

​prototype​原型属性可用于创建对象链,其中对象从其原型继承属性和方法,原型又从其自己的原型继承属性和方法,依此类推。

JavaScript还提供了一个内置的Object.create()​方法,允许您创建具有指定原型的对象。例如:

let person = { name: "John", age: 30};
let employee = Object.create(person);
console.log(employee.name); // Output: "John" (inherited from person)

创建具有指定原型的对象的另一种方法是使用new​ 具有构造函数的运算符

function Person(name, age) {
	this.name = name;
	this.age = age;
}
let employee = new Person("John", 30);
console.log(employee.name); // Output: "John"

在此示例中,员工employee​对象是使用Person​构造函数创建的,并继承在Person.prototype​对象上定义的属性和方法。

值得注意的是,JavaScript还有一个名为Object.prototype​的内置对象,它是所有对象的原型,提供了toString()​、valueOf()​和hasOwnProperty()​等方法。

总之,JavaScript中的原型用于创建对象链,其中对象从其原型继承属性和方法,从而为面向对象编程创建可重用机制。

对象继承

在JavaScript中,对象可以从其他对象继承属性和方法,这是一种原型继承​机制。

JavaScript中的每个对象都有一个称为prototype​原型的特殊属性,它是一个用作对象的父对象或基对象的对象。prototype​原型对象包含对象继承的属性和方法。



例如,如果您有一个具有属性name​和age​的对象person​,并且您想创建另一个继承person​属性的对象employee​,您可以将employee​对象的prototype​原型设置为person​。

let person = {
	name: "John",
	age: 30
};
let employee = Object.create(person);
employee.jobTitle = "Developer";
console.log(employee.name); // Output: "John" (inherited from person)
console.log(employee.jobTitle); // Output: "Developer" (own property)

在此示例中,employee​对象从person​对象继承name​属性,但具有其jobTitle​属性。

JavaScript还提供了一个内置的Object.create()​方法,允许您创建具有指定原型的对象。

let person = {
	name: "John",
	age: 30
};
let employee = Object.create(person);

创建具有指定原型的对象的另一种方法是将new​运算符与构造函数一起使用。

function Person(name, age) {
	this.name = name;
	this.age = age;
}
Person.prototype.greet = function(){console.log(`Hi, My name is ${this.name}`)}
let employee = new Person("John", 30);
console.log(employee.name); // Output: "John"
console.log(employee.greet()); // Output: Hi, My name is John

在此示例中,employee​对象是使用Person​构造函数创建的,并继承在Person.prototype​原型对象上定义的属性和方法。

值得注意的是,在搜索属性时,JavaScript会首先在对象本身寻找属性,然后在它的原型上,依此类推,在原型链上,一个叫做“原型链解析”的过程。如果在对象本身没有找到属性,JavaScript会在对象的原型上寻找它,如果在那里没有找到,它会在原型的原型上寻找它,依此类推,直到它到达原型链的末端。