前端基础19:call/apply/bind操作

深入学习函数

  • 普通的函数
    • 1.私有作用域
    • 2.形参赋值
    • 3.变量提升
    • 4.代码从上到下执行
  • 构造函数(类)
    • 类,实例,原型
  • 函数
    • 增删改查
    • 若函数当成对象时,函数名就相当于对象名
	function fn(){ console.log(1); } 
	fn.aa = 33;//这种属性称为静态属性。没有动态属性!!
	console.log(fn.aa); 
复制代码
  • 若函数当成对象时,函数名就相当于对象名
    • 当成函数时,有一个属性是prototype指向原型对象
    • 当成对象时,有一个属性__proto__,指向所属类的原型
    • 所有的函数都是Function类的实例
  • instanceOf看一个对象是否在另一个对象的原型链上
    console.log(Function instanceof Object); //true
    console.log(Object instanceof Function);//true
    console.log(Function.prototype.__proto__ == Object.prototype); //true
    console.log(Function.__proto__.__proto__ == Object.prototype); //true
    console.log(Function.__proto__ === Object.__proto__); //true
复制代码
    function Foo() {
        getName = function () {
            console.log(1);
        };
        return this;
    }
    Foo.getName = function () {
        console.log(2);
    };
    Foo.prototype.getName = function () {
        console.log(3);
    };
    var getName = function () {
        console.log(4);
    };
    function getName() {
        console.log(5);
    }

    Foo.getName();//2
    getName();//4
    Foo().getName();//1
    getName();//1
    new Foo.getName();//2
    new Foo().getName();//3
复制代码

call apply bind

  • callapplybind执行的作用:用来改变点前面方法的this的关键字
call
  • call方法的参数:第一个参数用来改变点前面方法里的this关键字,从第二个参数开始,会当成实参传给点前面的方法 (传参方式:散列式)
    function fn(a,b) {
        console.log(this+a+b);
    }
    fn(10.20);
    fn.call(); //实例去调用原型上的方法
    fn.call({},20,30)//将fn中的this改变成{}  [object Object]2030
    fn.call(10,20,30)//60
复制代码
apply
  • apply方法的参数:第一个参数用来改变点前面方法里的this关键字,第二个参数需要是数组或者类数组,然后一起传给点前面的方法 (传参方式:打包式)
fn.apply({},[20,30]);//传参时是打包式的但是实参传给形参时,还需要把实参里所有的内容一个一个的给形参
复制代码
    function fn() {
        "use strict" //严格模式   
        console.log(this);
    }
    fn.call(10);//{10}        不用严格模式:Number{10}
    fn.call({});//{}                     {}
    fn.call(null);//null                 window
    fn.call(undefined);//undefined       window
    fn.call();//undefined                window

复制代码
bind
  • bind第一个参数和call作用相同,传参烦是和call方法一样都是散列式
  • fn.bind({},10,20)将所有的参数传给点前面的方法后返回一个需要执行的小函数,想要执行时手动执行 (柯里化函数)

转载于:https://juejin.im/post/5b99bea46fb9a05cfa2facd5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值