写在前面:因为还没开始工作,可能有的部分有错,希望大家能指点出来,这是我看渡一的视频总结的笔记,所有的示例都来自视频,我算是一个搬运工了吧哈哈哈,视频讲的很好,强烈推荐大家去看一看ヾ(◍°∇°◍)ノ゙
call/apply
作用
改变this指向(this指向需要被更改的对象)
借用别人的函数实现自己的功能
区别
传参列表不同
call–>(this指向,实参,实参…)
apply–>(this指向,[实参1,实参2,…])
call
用法:被借对象.call(借东西的对象(被更改),实参,实参,…)
//创建一个构造函数
function Person(name,age) {
//this == obj4
this.name = name;//同obj.name = name
this.age = age
}
var person = new Person('deng',100);
//不new的话,this指向的是window
-----------call------------------
---obj4借用了Person对象的方法来实现obj4的功能-----
----obj4借助Person的环节制造了obj4的属性----
var obj4 = {};//是一个空对象
Person.call(obj4,'lin',100);
//↑改变了Person的this指向
obj4//{name: "lin", age: 100}
//↑obj4拥有了Person的方法
obj4不再是空对象
//----函数执行真相
function test() {
}
test()//-->test.call();
2.后面的构造函数使用之前的函数的属性,实现自己功能的封装
(适用于:后面的函数的需求完全涵盖前面的函数的需求,若不能完全覆盖,可以给实参赋值undefined)
function Person(name,age,sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
function Student(name,age,sex,grade,tel) {
//利用上一个函数的属性,实现自己的功能↓
Person.call(this,name,age,sex);
this.grade = grade;
this.tel = tel;
}
var student = new Student('sa',18,'male',2017,139);
//Student
{name: "sa",
age: 18,
sex: "male",
grade: 2017,
tel: 139}
3.批量借用别的函数的方法
//-------汽车工厂--------------
//分工厂1
function Wheel(wheelSize,style) {
this.style = style;
this.wheelSize = wheelSize;
}
//分工厂2
function Sit(c,sitColor) {
this.c = c;
this.sitColor = sitColor;
}
//分工厂3
function Model(height,width,len) {
this.height = height;
this.width = width;
this.len = len;
}
//总工厂--集合分工厂123
function Car(wheelSize,style,c,sitColor,height,width,len) {
//----------√--↓-----------------
Wheel.call(this,wheelSize,style);
Sit.call(this,c,sitColor);
Model.call(this,height,width,len);
}
var car = new Car(100,'a','b','c',4900,400,2000);