学习时间 完成时间 ✅ 重难点 疑问/遗漏
复习时间

原型链的顶端是Object.prototype
Object.prototype里保存着toString方法

  1. function Car(){
  2. this.brand='Benz';
  3. }
  4. Car.prototype={
  5. brand:'Mazda',
  6. intro: function(){
  7. console.log('我是'+this.brand+'车')
  8. }
  9. }
  10. var car=new Car();
  11. car.intro(); //我是Benz车
  12. Car.prototype.intro(); //我是Mazda车
  13. 普通函数默认返回的是undefined,构造函数实例话以后,默认返回this
  14. Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__
  15. function Obj(){}
  16. Obj.prototype.num=1;
  17. var obj1=Object.create(Obj.prototype);
  18. var obj2=new Obj();
  19. 此时obj1obj2构造出来的对象一样
  20. //new Obj()中的new做了什么
  21. 实例话obj2,调用构造函数Obj的初始化属性和方法
  22. 指定实例话对象的原型
  23. __proto__是系统属性,我们只能修改里面的内容,不能指定给对象指定__proto__

image.png
image.png
原型方法的重写

call和apply、bind

相同之处:改变函数体内this的指向
不同之处:call、apply的区别,接受参数的方式不一样
bind:不立即执行,apply、call立即执行

  1. callapply的作用都是改变this的指向
  2. function test(){
  3. console.log('a')
  4. }
  5. test()相当于test.call()
  6. function Car(brand,color){
  7. this.brand=brand;
  8. this.color=color;
  9. }
  10. var newCar={
  11. displacement:'3.0'
  12. };
  13. Car.call(newCar,'Benz','red')
  14. Car.apply(newCar,['Benz','red'])
  15. console.log(newCar) newCar的结果为
  16. {
  17. brand: "Benz",
  18. color: "red",
  19. displacement:'3.0',
  20. __proto__: Object
  21. }
  22. function Compute(){
  23. this.plus=function(a,b){
  24. console.log(a+b)
  25. }
  26. this.minus=function(a,b){
  27. console.log(a-b)
  28. }
  29. }
  30. function FullCompute(){
  31. Compute.apply(this);
  32. this.mul=function(a,b){
  33. console.log(a*b)
  34. }
  35. this.div=function(a,b){
  36. console.log(a/b)
  37. }
  38. }
  39. var compute=new FullCompute();
  40. compute.plus();
  41. compute.minus();
  42. compute.mul();
  43. compute.div();
  1. slice可以处理数组和字符串,并没有什么区别
  2. var str='abc';
  3. var str1=str.slice(1,undefined) str1='bc' ,str='abc'
  4. str.slice(-2) //'bc'
  5. slice 不支持倒序
  6. let arr=[1,2,3,4,5]
  7. arr.slice(1,4) //[2,3,4] arr不改变还是[1,2,3,4,5]
  8. let arr1=arr.splice(1); //arr1=[2,3,4,5],arr为[1]
  9. substring 支持倒序(31)实际取的是(13),反序(-2)不支持
  10. indexOf可以处理数组和字符串,indexOf的第二个参数表示从第几个位置开始找
  11. let str='abcde'
  12. str.indexOf('d') //3
  13. str.indexOf('a',-1) indexOf在处理数组的时候将-1当作0处理
  14. 字符串一般不会处理负数,一般将负数当作0处理,数组一般都是支持负数的
  15. let arr=[2,1,3,4,2,5]
  16. arr.indexOf(2,-2) //4
  17. //从后往前找
  18. arr.lastIndexOf(2) //4
  19. str.lastIndexOf(2,undefined/NaN) 都表示str.length-1
  20. str.lastIndexof(2,null) //把null当作0处理,从0往前走,没有数据所以为-1