📅  最后修改于: 2023-12-03 15:11:57.896000             🧑  作者: Mango
在JavaScript中,每个对象都有一个[[Prototype]]属性,该属性指向一个被称为原型的对象。当我们访问一个对象的属性时,如果该属性不存在于该对象中,则JavaScript引擎将从该对象的原型中查找该属性,如果仍然找不到,则继续查找原型的原型,以此类推,直到找到属性或抵达原型链的末尾null。这就是JavaScript中的原型继承机制。
在JavaScript中,有多种方式可以创建对象。下面是一些常见的方式:
const person = {
name: 'John',
age: 30,
sayHello: function() {
console.log('Hello!');
}
};
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function() {
console.log('Hello!');
}
}
const john = new Person('John', 30);
const person = {
name: 'John',
age: 30,
sayHello: function() {
console.log('Hello!');
}
};
const john = Object.create(person);
在JavaScript中,每个对象都有一个[[Prototype]]属性,用于指向它的原型。我们可以使用Object.getPrototypeOf方法来获取对象的原型,例如:
const person = {
name: 'John',
age: 30,
sayHello: function() {
console.log('Hello!');
}
};
const john = Object.create(person);
console.log(Object.getPrototypeOf(john)); // 输出: {name: 'John', age: 30, sayHello: ƒ}
原型继承是指将一个对象的原型指向另一个对象,从而继承其属性和方法。在JavaScript中,可以通过Object.create方法来实现原型继承。例如:
const person = {
name: 'John',
age: 30,
sayHello: function() {
console.log('Hello!');
}
};
const john = Object.create(person);
console.log(john.name); // 输出:'John'
john.sayHello(); // 输出:'Hello!'
在这个例子中,我们将john的[[Prototype]]属性指向了person对象,因此john可以继承person对象的属性和方法。
在JavaScript中,每个对象都有一个[[Prototype]]属性,它指向该对象的原型。如果该原型对象本身也有一个[[Prototype]]属性,则继续向上查找,直到找到一个没有[[Prototype]]属性的对象为止,这个对象就是原型链的末端。
例如:
const person = {
name: 'John'
};
const john = Object.create(person);
const student = Object.create(john);
console.log(student.name); // 输出:'John'
在这个例子中,student对person的[[Prototype]]进行了两次继承,因此它能够访问到person对象中的属性。
JavaScript中的原型继承与传统的基于类的继承有所不同。传统的继承是通过类定义并创建对象,而对象继承了类的的属性和方法。在原型继承中,对象之间是通过继承其它对象来共享属性和方法的。这种动态特性使得JavaScript中的原型继承更加灵活和适应性更强。
在JavaScript中的原型继承是通过[[Prototype]]属性实现的,每个对象都有一个[[Prototype]]属性,指向该对象的原型。通过原型链,可以访问到原型链上的属性和方法。原型继承是一种灵活而强大的继承方式,可以用于创建各种类型的对象和数据结构。