原型和原型链

1.原型:

  JS中是使用构造函数来新建一个对象的,每一个构造函数内部都有一个prototype属性,它的属性值是一个对象,这个对象包含了可以由该构造函数的所有实例共享的属性和方法

  当使用构造函数新建一个对象之后,在这个对象内部会有一个指针,这个指针指向了构造函数的prototype属性对应的值

  这个指针就是对象的原型

2.原型链:

  当访问一个对象的属性时,如果这个对象内部不存在这个属性,那么它就会去它的原型对象里找这个属性,这个原型对象又会有自己的原型,就这么一直找下去

  这就是原型链

 

  Object是构造函数,原型链终点是Object.prototype.__proto__,而Object.prototype.__proto__=== null // true

  所以,原型链的终点是null

  原型链上的所有原型都是对象,所有的对象最终都是由Object构造的,而Object.prototype的下一级是Object.prototype.__proto__

3.原型、原型链的意义和作用?

  原型对象是用来存放实例中共有的那部份属性、方法,可以大大减少内存消耗;

  可以动态获取,可以节省内存。

4.原型链的指向

p.__proto__  // Person.prototype
Person.prototype.__proto__  // Object.prototype
p.__proto__.__proto__ //Object.prototype
p.__proto__.constructor.prototype.__proto__ // Object.prototype
Person.prototype.constructor.prototype.__proto__ // Object.prototype
p1.__proto__.constructor // Person
Person.prototype.constructor  // Person
p.__proto__  // Person.prototype
Person.prototype.__proto__  // Object.prototype
p.__proto__.__proto__ //Object.prototype
p.__proto__.constructor.prototype.__proto__ // Object.prototype
Person.prototype.constructor.prototype.__proto__ // Object.prototype
p1.__proto__.constructor // Person
Person.prototype.constructor  // Person

四个概念、两个准则:

  1. js分为函数对象和普通对象,每个对象都有_proto_属性,但是只有函数对象有prototype属性

  2.Object、Function都是js内置的函数,类似的还有我们常用的Array、RegExp、Boolean、Number、String

  3.属性_proto_是一个对象,它有两个属性,constructor和_proto_

  4.原型对象prototype有一个默认的constructor属性,用于记录实例是由哪个构造函数创建

 

  准则一:Person.prototype.constructor == Person // **准则1:原型对象(即Person.prototype)的constructor指向构造函数本身**

  准则二:Person._proto_ == Person.prototype // **准则2:实例(即person01)的__proto__和原型对象指向同一个地方**

posted @ 2023-02-03 01:50  felix的小黑屋  阅读(30)  评论(0)    收藏  举报