原型和原型链
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__和原型对象指向同一个地方**
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号