继承:
JS的继承是基原型的继承
原型
1.obj.proto找到它的原型对象
2.数组上的方法都是挂载在原型上(Array.prototype)的
var arr = [1,2,3];// toString(); 因为数组的原型上有字符串toString();// push,unshift() 因为数组原型上有console.log(Array.prototype)console.log(arr.__proto__==Array.prototype)
1.原型构造
/* Function */var arr = new Array(1,2,3);/* Array.prototype */console.log(arr);/* sum */var obj = [4,5,6];Array.prototype.sum = function(params){if(Array.isArray(params)){return params.reduce((a,b)=>a+b);}}/*在数组的原型上添加http方法方法名 http输出 console.log("http")*/console.log(arr.sum(arr));console.log(obj.sum(obj));
2.原型对象
作用:
将对象通用的方法挂载在原型上
原型对象:
是某一类对象的基类,所有创建的对象都会共享该原型对象 (共享机制)
function Student(name,age){this.name = name;this.age = age;}/* sayName */Student.prototype.sayName = function(){console.log(this.name)}var s = new Student("cheng",20);console.log(s)console.log(Student.prototype)
function Teacher(name,age){this.name = name;this.age = age;}Teacher.prototype.sayName = function(){console.log(this.name)}var p = new Teacher("lisi",20);/* 1.有没有sayName *//* 2.为什么有sayName */console.log(p)
3.原型链
var arr = [1,2,3];// valueOf// console.log(arr.valueOf());console.log(arr.__proto__)
实例:判断一个对象是不是某个类的实例
var arr = [1,2,3];//instanceof 判断一个对象是不是某个类的实例console.log(arr instanceof Array);function Person(name,age){this.name = name;this.age = age;}var p = new Person("cheng",12)console.log(p instanceof Person)
