你不知道的JS系列 ( 17 ) - 为什么使用 this

var me = {
  name: 'Kyle'
};
var you = {
  name: 'Reader'
}
function identify(){
  return this.name.toUpperCase();
}
function speak(){
  var greeting = "Hello, I'm " + identify.call(this);
  console.log(greeting);
}
identify.call(me); // KYLE
identify.call(you); // READER

speak.call(me); // hello, 我是KYLE
speak.call(you); // hello, 我是READER

这段代码可以在不同的上下文对象(me 和 you)中重复使用函数 identify() 和 speak(),不用针对每个对象编写不同版本的函数。如果不使用 this,那就需要给 identify() 和 speak() 显式传入一个上下文对象。

var me = {
  name: 'Kyle'
};
var you = {
  name: 'Reader'
}
function identify(context){
  return context.name.toUpperCase();
}
function speak(context){
  var greeting = "Hello, I'm" + identify(context);
}
identify(you); // READER
speak(me); // hello, 我是KYLE

随着你的使用模式越来越复杂,显示传递上下文对象会让代码变得越来越混乱,使用 this 则不会这样。this 提供了一种更优雅的方式来隐式“传递”一个对象引用,因此可以将 API 设计得更加简洁并且易于复用。



posted @ 2020-03-02 06:35  wzndkj  阅读(228)  评论(0编辑  收藏  举报