1.创建的每一个函数,解析器都会向函数中添加一个prototype属性,

  1. var arr=[1,2,3];
  2. //toString();因为数组的原型上有toString()方法
  3. //push pop 因为数组原型上有
  4. console.log(arr.toString());//1,2,3
  5. /* 原型:
  6. 1.obj.__proto__找到它的原型对象
  7. 2.数组上的方法都是挂载在原型上(Array.prototype)的
  8. */
  9. console.log(Array.prototype);
  10. console.log(arr.__proto__==Array.prototype);//true

2这个属性对应着一个对象,就是我们所谓的原型对象

原型对象:是某一类对象的基类,所有创建的对象都会共享该原型对象(共享机制)
作用:将对象的通用方法挂载在原型上
Student类

  1. function Student(name,age){
  2. this.name=name;
  3. this.age=age;
  4. }
  5. Student.prototype.sayName=function(){
  6. console.log(this.name);
  7. }
  8. var s= new Student("小明",18);
  9. console.log(s) ;
  10. console.log(Student.prototype);

Teacher类

  1. function Teacher(name,age){
  2. this.name=name;
  3. this.age=age;
  4. }
  5. Teacher.prototype.sayName=function(){
  6. console.log(this.name);
  7. }
  8. var p=new Teacher("lisa",18)
  9. console.log(p);

image.png
在原型对象上自定义方法

  1. var arr=new Array(1,2,3);
  2. console.log(arr);[1,2,3]
  3. Array.prototype.sum=function(params){
  4. if(Array.isArray(params)){
  5. return params.reduce((a,b)=>a+b)
  6. }
  7. }
  8. console.log(arr.sum(arr));//6
  9. Array.prototype.http=function(){
  10. console.log("http");
  11. }
  12. arr.http();//http