首页 > 常见问题 > 什么是原型和原型链

什么是原型和原型链

百草
发布: 2023-11-09 17:59:48
原创
2225 人浏览过

原型,js中的一个对象,用于定义其他对象的属性和方法,每个构造函数都有一个prototype属性,这个属性是一个指针,指向一个原型对象,当创建新对象时,这个新对象会从其构造函数的prototype属性继承属性和方法。原型链,当试图访问一个对象的属性时,js会首先检查这个对象是否有这个属性,如果没有,那么js会转向这个对象的原型,如果原型对象也没有这个属性,会继续查找原型的原型。

什么是原型和原型链

本教程操作系统:windows10系统、DELL G3电脑。

原型(Prototype)和原型链(Prototype chain)是面向对象编程中的一个重要概念,特别是在JavaScript这种支持动态原型的语言中。理解原型和原型链对于理解如何创建和使用对象,以及如何调用对象的方法至关重要。

原型(Prototype):

原型是JavaScript中的一个对象,用于定义其他对象的属性和方法。每个构造函数都有一个prototype属性,这个属性是一个指针,指向一个原型对象。当创建新对象时,这个新对象会从其构造函数的prototype属性(即原型对象)继承属性和方法。

例如:

function Person(name) {  
  this.name = name;  
}  
  
Person.prototype.sayHello = function() {  
  return 'Hello, my name is ' + this.name;  
};  
  
let person1 = new Person('Alice');  
let person2 = new Person('Bob');  
  
console.log(person1.sayHello()); // 输出: 'Hello, my name is Alice'  
console.log(person2.sayHello()); // 输出: 'Hello, my name is Bob'
登录后复制

在上面的例子中,我们定义了一个Person构造函数,并通过Person.prototype定义了一个sayHello方法。然后我们创建了两个Person对象,它们都继承了sayHello方法。这是因为它们都是从Person.prototype这个原型对象上继承的。

原型链(Prototype chain):

当试图访问一个对象的属性时,JavaScript会首先检查这个对象是否有这个属性。如果没有,那么JavaScript会转向这个对象的原型(即构造函数的prototype属性)。如果原型对象也没有这个属性,那么JavaScript会继续查找原型的原型,以此类推,直到找到一个有该属性的对象,或者达到原型链的顶端(即null)。这就是所谓的原型链。

例如:

function Person(name) {  
  this.name = name;  
}  
  
Person.prototype.sayHello = function() {  
  return 'Hello, my name is ' + this.name;  
};  
  
let person1 = new Person('Alice');  
delete person1.sayHello; // 删除person1的sayHello属性  
  
console.log(person1.sayHello()); // 输出: 'Hello, my name is Alice'
登录后复制

在上面的例子中,我们删除了person1的sayHello属性。当我们试图访问person1.sayHello()时,JavaScript首先检查person1是否有sayHello属性。由于person1没有这个属性,JavaScript会转向person1的原型(即Person.prototype),那里有sayHello方法,因此它被调用。这就是原型链的作用:它提供了一种方式来共享对象的属性和方法,即使这些属性和方法在对象自身上没有定义。

以上是什么是原型和原型链的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板