美文网首页
Es6的super关键字和箭头函数this指向

Es6的super关键字和箭头函数this指向

作者: 秦声 | 来源:发表于2018-12-28 22:45 被阅读0次

super关键字

super关键字指向该对象的原型,super关键字只能使用在对象简写的方法中,请看下列。

Object.prototype.name = '秦司令';
var json = {
    name:'我是json',
    add(){
        return super.name;
    }
}
console.log(json.add()) // 秦司令

上面代码中,super关键字,指向json对象的原型,json的原型就是Object,所以在外面设置了一下Object原型的name。


下面在看一个列子

var obj = {
    name:'我是obj',
};
        
var json = {
    name:'我是json',
    add(){
        return super.name;
    }
}

Object.setPrototypeOf(json,obj);
console.log(json.add()); // 我是obj

上面代码中,将json的原型设置为obj,所以调用add方法指向obj的name属性。


注意,super关键字只能在对象方法简写内使用

// 报错
var json = {
  add:function(){
      return super.name
  }
};

// 报错
var json = {
    add:()=>{
        return super.name
    }
}

箭头函数的使用

var f = v => 1
console.log(f(1))  // 1

// 上面写法等同于下面

var f = function (v){
    return v
}

上面代码中,箭头函数的参数如果有一个就不用带括号,如果多个参数就得使用括号了。

var f = (v,v1) => [v,v1]
console.log(f(1,2)) // [1,2]

setTimeout(()=>{

},2600)

箭头函数this的指向

var obj = {
    f(){
        setTimeout(()=>{
            console.log(this)
        },20)
    }
};
console.log(obj.f()) // f 

var obj = {
    f:()=>{
        setTimeout(()=>{
            console.log(this)
        },20)
    }
};

console.log(obj.f()) // window

箭头函数在对象的普通函数中指向本函数,箭头函数里面根本没有自己的this,而是引用外层的this,箭头函数不能绑定this。


function Timer() {
  this.s1 = 0;
  this.s2 = 0;
  // 箭头函数
  setInterval(() => this.s1++, 1000);
  // 普通函数
  setInterval(function () {
    this.s2++;
  }, 1000);
}

var timer = new Timer();

setTimeout(() => console.log('s1: ', timer.s1), 3100);
setTimeout(() => console.log('s2: ', timer.s2), 3100);
// s1: 3
// s2: 0

上面代码中,Timer函数内容部设置了两个定时器,一个普通定时器函数,一个箭头定时器函数,箭头函数往上找,找到本函数timer对象,然而普通定时器函数,直接指向window,所以,3100 毫秒之后,timer.s1被更新了 3 次,而timer.s2一次都没更新。

希望本文章能对你有所收获。

相关文章

  • 对象新增的一些方法

    1:super关键字; this是指向当前的函数;也是代表当前的作用域;es6新增了super指向当前对象的原型;...

  • es6、js、css、jquery、vue以及程序设计 知识点总

    es6 列举常用的es6特性。 箭头函数this的指向。 eg:箭头函数的特性 箭头函数内部没有construc...

  • Es6的super关键字和箭头函数this指向

    super关键字 super关键字指向该对象的原型,super关键字只能使用在对象简写的方法中,请看下列。 上面代...

  • 关于ES6箭头this的指向问题

    ES6 允许使用 “ 箭头 ” (=>)定义函数。 箭头函数 填 坑。 this的指向是 向上查找 非箭头函数的...

  • 关于箭头函数 this的指向问题

    ES6 允许使用 “ 箭头 ” (=>)定义函数。 箭头函数 填 坑。 this的指向是 向上查找 非箭头...

  • 关于箭头函数 this的指向问题

    ES6 允许使用 “ 箭头 ” (=>)定义函数。 箭头函数 填 坑。 this的指向是 向上查找 非箭头函数的函...

  • super关键字

    我们知道,this关键字总是指向函数所在的当前对象,ES6 又新增了另一个类似的关键字super,指向当前对象的原...

  • ES6新特性(更新篇)

    首先感谢Carnia帮我指出ES6箭头函数中this指向的错误,此次主要更新箭头函数中this指向问题。 ECMA...

  • 箭头函数中的this

    箭头函数是ES6的新特性,作为解决传统函数this指向难以追溯的方案(或者说不想写function关键字),按照部...

  • 箭头函数

    1,箭头函数定义 2,Es6 中箭头函数参数与返回值简写 补充 3,箭头函数中 this 指向 注:箭头函数中的t...

网友评论

      本文标题:Es6的super关键字和箭头函数this指向

      本文链接:https://www.haomeiwen.com/subject/iyfylqtx.html