Javascript学习摘抄,this的用法 ①

掌握this用法,自己写代码不迷糊。同时也为了看懂别人的代码。

一般函数执行,this指代全局。

function test(){

    this.x = 1;

    console.log(this.x);

}

test(); 

隐式绑定与显式绑定

var star = {
    name: '蔡徐坤',
    greeting:function(a, b, c){
        console.log(a,  b,  c);
        console.log('大家好我是', this.name);
    },
    master:{
        name:'马保国',
        greeting:function(){
            console.log('大家好俺是', this.name);
        }
    }
};

..隐式绑定

star.greeting()     //   this指向star这个object
star.master.greeting()         //  this指向starobject下的master元素,当前master对象

面试题陷阱

var specialGreeting = star.greeting;   

specialGreeting();      //this指向window,window.specialGreeting,作用于全局 

window.specialGreeting();       //   亦可写作window.specialGreeting,作用于全局

..显式绑定

1.call     2.apply     3.bind

1.call()  无视this,强行绑定参数。改变this指向,括号内第一个为this的绑定对象,单独传每个参数。

var star2 = {

    name: '肖战'

};



star.greeting.call(star2, 'a' ,'b' ,'c');   //调用star.greeting,this使用call绑定star2,a b c 分别对应函数里的abc

star.master.greeting.call(star2);   //调用star.master.greeting,this使用call绑定star2

2.apply()  无视this,强行绑定参数。改变this指向,括号内第一个为this的绑定对象,后面按照数组传参。

star.greeting.apply(star2);   //调用star函数,this使用apply显示绑定star2

star.master.greeting.call(star2, ['a', 'b', 'c']);   //调用star.master函数,this使用call显示绑定star2 

3.bind()   bind绑定不会直接传参,返回的是函数。

// star.greeting.bind(star2);  bind绑定不会立刻执行,返回的是个函数。
var specialGreeting = star.greeting.bind(star2);        //返回的是个函数,故需保存
specialGreeting();        //调用specialGreeting(),此时this绑定了star2

构造函数里new了新对象后,this绑定新对象。

function Star(name){
    this.name = name;
    this.greeting = function(){
        console.log('Hey,我是', this.name);
    }
}
var superstar = new Star('蔡依林');
console.log(superstar);
superstar.greeting();

 ES6新增箭头函数

ES6中箭头函数的几种缩写

function sum(a, b){
    return a + b;
};

(a, b) =>{
    return a + b;
}

(a, b) => a + b; //匿名函数

var sum = (a, b) => a + b; //匿名函数,需要用变量赋值的方式保存函数名字,var sum =。 
var star = {
    name: '蔡徐坤',
    favourites: ['篮球', '唱跳', 'rap'],
    greeting: function(){
        console.log(
            '大家好,我是',
            this.name,
            '我的爱好是',
            this.favourites
        );
        this.favourites.forEach( (item) => {
            console.log(this);      //如果不使用箭头函数,此处this指代全局
            console.log(item);
        });            arrow function 的this在语法层面会直接继承调用
    }
};

star.greeting();

很明显,arrow function 的this 在语法层面会直接继承 《调用》。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值