JavaScript原型与原型链
1. 原型:
-
我们在创建函数、对象时,都会向函数中添加一个prototype属性,该属性对应着一个对象即原型对象。
-
当以构造函数的形式调用时,通过构造函数.prototype的形式调用原型对象中的属性和方法。
-
通过实例对象调用时,在new一个实例对象时,实例对象中隐含一个 __ proto __属性,指向该构造函数的原型对象,通过实例对象. __ proto __的方式调用原型对象。
// 新建一个构造函数 function Person() {} //向Person的原型中添加属性name Person.prototype.name = '张三'; // 实例化一个对象 let per = new Person() //向Person的原型中添加属性age per.__proto__.age = 20 console.log(per);
-
每一个构造函数中都有一个prototype属性,即显示原型(属性),默认指向一个Object空对象(即 原型对象)。原型对象中有一个属性constructor,它指向构造函数。
即:构造函数.prototype.constructor == 构造函数。
-
每个实例对象中都有一个__ proto __属性,即隐式原型(属性),默认值为构造函数的prototype属性值,即 Object空对象(即 原型对象)。
即:实例对象. __ proto __ == 构造函数.prototype
特殊:
- Function.__ proto __===Function.prototype
- Object.prototype.__ proto__ === null
2.原型链:
- 当我们使用一个对象的属性或方法时,会先在自身寻找,有则直接使用,如果没有,则去原型对象中寻找,如果还没有则去原型的原型对象中寻找,直到找到Object对象的原型。
Object对象的原型没有原型,如果在Object中依然没有找到,则会返回undefined。
即: 原型的尽头是Object的原型

本文详细阐述了JavaScript中构造函数的prototype属性及其作用,并解释了如何通过实例对象访问原型对象中的属性和方法。此外,还介绍了原型链的概念,即当访问一个对象的属性时,若对象本身未定义该属性,则会沿着原型链向上查找。
926

被折叠的 条评论
为什么被折叠?



