学习时间 | 完成时间 ✅ | 重难点 | 疑问/遗漏 |
---|---|---|---|
复习时间 | |||
原型链的顶端是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,构造函数实例话以后,默认返回this
Object.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') //3
str.indexOf('a',-1) indexOf在处理数组的时候将-1当作0处理
字符串一般不会处理负数,一般将负数当作0处理,数组一般都是支持负数的
let arr=[2,1,3,4,2,5]
arr.indexOf(2,-2) //4
//从后往前找
arr.lastIndexOf(2) //4
str.lastIndexOf(2,undefined/NaN) 都表示str.length-1
str.lastIndexof(2,null) //把null当作0处理,从0往前走,没有数据所以为-1