【JS】 初识JS原型

//this 和 prototype 的区别
//1.this 声明的成员 属于AA类;prototype 声明的成员 属于原型所有
//2.在 var aa=new AA() 时, aa将拥有prototype和this的所有成员;调用一个成员时会先去this(即属于AA类的成员)里面找,再去prototype里找;
 
//call 和 prototype 实现继承的区别
//1.例如:BB类使用 AA.Call(this) 
//    1.BB类只会拥有AA类的成员,而不会拥有AA的prototype的成员;而使用prototype实现继承 则会拥有prototype对象的所有成员
//    2.prototype可以实现多级继承,即AA的prototype是BB对象,BB的prototype是CC对象,此时AA的实例将会拥有 BB类、CC类的所有成员,
//      在调用顺序上先找本类的,再找本类原型的,一直找到Object为止
 
//prototype 和 __proto__
//prototype是函数对象(即类||Function||Constructor)的属性,指向的所应用另一个函数对象的实例,
//__proto__是实例对象的属性,指向这个实例的函数对象的prototype      
//证实:  [aa.__proto__===AA.prototype] 为true
 
//constructor
//每个prototype 都有一个 constructor属性 ,指向所属的 函数对象(Function)  [AA.prototype.constructor===AA] 为true
 
//普通方法、静态方法
  普通方法使用this声明,静态方法使用函数对象名声明 (注:实例不能使用静态方法(即其函数对象声明的方法))
 
//函数对象的原型 为 单例的,即:函数对象和函数对象的实例共享;如:AA.prototype/new AA().__proto__  可以对原型进行修改,修改实例和函数 所指向的原型的值都会改变
 
原文地址:https://www.cnblogs.com/LightChan/p/7569230.html