2019web前端javascript--入门级理解call和apply

写在前面:因为还没开始工作,可能有的部分有错,希望大家能指点出来,这是我看渡一的视频总结的笔记,所有的示例都来自视频,我算是一个搬运工了吧哈哈哈,视频讲的很好,强烈推荐大家去看一看ヾ(◍°∇°◍)ノ゙

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);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值