继承:
JS的继承是基原型的继承
原型
1.obj.proto找到它的原型对象
2.数组上的方法都是挂载在原型上(Array.prototype)的

  1. var arr = [1,2,3];
  2. // toString(); 因为数组的原型上有字符串toString();
  3. // push,unshift() 因为数组原型上有
  4. console.log(Array.prototype)
  5. console.log(arr.__proto__==Array.prototype)

1.原型构造

  1. /* Function */
  2. var arr = new Array(1,2,3);
  3. /* Array.prototype */
  4. console.log(arr);
  5. /* sum */
  6. var obj = [4,5,6];
  7. Array.prototype.sum = function(params){
  8. if(Array.isArray(params)){
  9. return params.reduce((a,b)=>a+b);
  10. }
  11. }
  12. /*
  13. 在数组的原型上添加http方法
  14. 方法名 http
  15. 输出 console.log("http")
  16. */
  17. console.log(arr.sum(arr));
  18. console.log(obj.sum(obj));

2.原型对象

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

  1. function Student(name,age){
  2. this.name = name;
  3. this.age = age;
  4. }
  5. /* sayName */
  6. Student.prototype.sayName = function(){
  7. console.log(this.name)
  8. }
  9. var s = new Student("cheng",20);
  10. console.log(s)
  11. console.log(Student.prototype)
  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("lisi",20);
  9. /* 1.有没有sayName */
  10. /* 2.为什么有sayName */
  11. console.log(p)

3.原型链

  1. var arr = [1,2,3];
  2. // valueOf
  3. // console.log(arr.valueOf());
  4. console.log(arr.__proto__)

实例:判断一个对象是不是某个类的实例

  1. var arr = [1,2,3];
  2. //instanceof 判断一个对象是不是某个类的实例
  3. console.log(arr instanceof Array);
  4. function Person(name,age){
  5. this.name = name;
  6. this.age = age;
  7. }
  8. var p = new Person("cheng",12)
  9. console.log(p instanceof Person)