创建对象的方式以及call,apply,bind的区别

创建对象的方式有四种

1.直接量

var obj={

属性名:属性

方法名:function(){}

}

2.通过构造函数创建对象,这样能够批量创建多个具有相同属性的子对象(顺便介绍call,apply,bind三个关键字的区别应用)

function person(name,age){

this.name=name;

this.age=age;

}

或者function person2(name,age){

this.name=argument[0];

this.age=argument[1];

}

第一种方式用call

functon student(name,age.sex,tel){

person.call(this,name,age);

this.sex=sex;

this.tel=tel;

}

call()的作用就是让person中的this的指向全部都改成call中的内容,并且能在里面追加参数

第二种方式用apply

functon student(name,age.sex,tel){

person2.apply(this,[name,age]);

this.sex=sex;

this.tel=tel;

}

还有第三种方式就是用bind

例子1:

function person(name,age){

this.name=name;

this.age=age;
console.log(this.name,this.age)

}


var student=person.bind();
student(9,10);

例子2:

function calc(base,bonus){

console.log(this.ename+"的总工资是"+(base+bonus)

}

var lilei ={ename:"li lei"}

var Lilei=calc.bind(lilei);

bind其实就是讲旧的函数复制了一份给了新的函数,并且永久绑定this,并且也可以永久绑定参数。

总结来说call借用别人的方法,完成自己的事情需要把实参按照形参的个数传进去。立刻执行

apply也是借用别人的方法,但是传递参数是按照数组的方式,需要注意实参跟形参的顺序。也是立刻执行

bind是创建了一个新的函数,但是不立刻执行。