| 学习时间 | 完成时间 ✅ | 重难点 | 疑问/遗漏 |
|---|---|---|---|
| 复习时间 | |||
原型链的顶端是Object.prototype
Object.prototype里保存着toString方法
function Car(){this.brand='Benz';}Car.prototype={brand:'Mazda',intro: function(){console.log('我是'+this.brand+'车')}}var car=new Car();car.intro(); //我是Benz车Car.prototype.intro(); //我是Mazda车普通函数默认返回的是undefined,构造函数实例话以后,默认返回thisObject.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。function Obj(){}Obj.prototype.num=1;var obj1=Object.create(Obj.prototype);var obj2=new Obj();此时obj1和obj2构造出来的对象一样//new Obj()中的new做了什么实例话obj2,调用构造函数Obj的初始化属性和方法指定实例话对象的原型__proto__是系统属性,我们只能修改里面的内容,不能指定给对象指定__proto__
call和apply、bind
相同之处:改变函数体内this的指向
不同之处:call、apply的区别,接受参数的方式不一样
bind:不立即执行,apply、call立即执行
call和apply的作用都是改变this的指向function test(){console.log('a')}test()相当于test.call()function Car(brand,color){this.brand=brand;this.color=color;}var newCar={displacement:'3.0'};Car.call(newCar,'Benz','red')Car.apply(newCar,['Benz','red'])console.log(newCar) newCar的结果为{brand: "Benz",color: "red",displacement:'3.0',__proto__: Object}function Compute(){this.plus=function(a,b){console.log(a+b)}this.minus=function(a,b){console.log(a-b)}}function FullCompute(){Compute.apply(this);this.mul=function(a,b){console.log(a*b)}this.div=function(a,b){console.log(a/b)}}var compute=new FullCompute();compute.plus();compute.minus();compute.mul();compute.div();
slice可以处理数组和字符串,并没有什么区别var str='abc';var str1=str.slice(1,undefined) str1='bc' ,str='abc'str.slice(-2) //'bc'slice 不支持倒序let arr=[1,2,3,4,5]arr.slice(1,4) //[2,3,4] arr不改变还是[1,2,3,4,5]let arr1=arr.splice(1); //arr1=[2,3,4,5],arr为[1]substring 支持倒序(3,1)实际取的是(1,3),反序(-2)不支持indexOf可以处理数组和字符串,indexOf的第二个参数表示从第几个位置开始找let str='abcde'str.indexOf('d') //3str.indexOf('a',-1) indexOf在处理数组的时候将-1当作0处理字符串一般不会处理负数,一般将负数当作0处理,数组一般都是支持负数的let arr=[2,1,3,4,2,5]arr.indexOf(2,-2) //4//从后往前找arr.lastIndexOf(2) //4str.lastIndexOf(2,undefined/NaN) 都表示str.length-1str.lastIndexof(2,null) //把null当作0处理,从0往前走,没有数据所以为-1


