资讯专栏INFORMATION COLUMN

this之剑传说

Eirunye / 469人阅读

摘要:之剑传说在国,有个关于之剑的传说,谁作为调用点,谁就是的主人。于是,直属的函数就会给对象使绊子,发泄自己的不满,只要是需要之剑的时候,直属函数就百般刁难。关于之剑传说我们暂时先说到这吧,欲知后事,下回分解。

this之剑传说

在javascript国,有个关于this之剑的传说,谁作为调用点,谁就是this的主人。

调用点是什么?调用点就是函数在代码中被调用的位置

函数是javascript国的执法人员,作为一个人民公仆,当然是哪里需要搬哪里,而他执法需要一些震慑别人的武器,this之剑就这样诞生了。
但是函数不能时时刻刻都拿着武器走在大街上吧,所以javascript国法律规定,只有在执法(被调用)的时候this之剑才起作用。

你认为this之剑是属于函数的?那就大错特错了,想想我们刚才说的,调用点才是this的主人,那么谁是调用点呢?能调用函数的人还用说吗?当然是javascript国最大的官window了。

不信你试试

let name = "window"
function fn() {
  let name = "function"
  console.log(`I am ${this.name}`)
}

fn() // I am window

难道只有所有this的主人都是window了吗?那倒不是,window作为大佬,手下没些小弟那怎么成,
对象就是window的忠实小弟

name = "window"
const obj = {
  name: "obj",
  fn: function () {
    console.log(`I am ${this.name}`)
  }
}

obj.fn() // I am obj

但有时候,对象旗下的函数能力有限,需要借助window的函数,作为window直属的函数就不乐意了:“我明明是大佬直属的部下,为什么要被你个小小的对象调用,我不服。”于是,window直属的函数就会给对象使绊子,发泄自己的不满,只要是需要this之剑的时候,直属函数就百般刁难。

const someThing = "relax"
function windowFn() {
  console.log(`let me do ${someThing}`)
}

const obj = {
  someThing: "work",
  objFn: windowFn,
}

obj.objFn() // let me do relax

这可怎么办啊,对象也不是吃素的,你有张良计,我有过墙梯。
对象决定告状!
window听了这种事,思索了一下,决定使用美人计,window给每个函数分配了callapply两个美女函数部下,
这美人计还真有用,每个函数都成了裙下之臣,乖乖执行对象布置的任务。

const someThing = "relax"
function windowFn() {
  console.log(`let me do ${someThing}`)
}

const obj = {
  someThing: "work",
  objFn: windowFn,
}

obj.objFn.call(obj)
obj.objFn.apply(obj)

说到这两大美女啊,各有各的喜好,虽然做一样的任务,但是收参数的方式却不太一样,call喜欢一个一个收,apply喜欢打包成数组一起收。

关于this之剑传说我们暂时先说到这吧,欲知后事,下回分解。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102783.html

相关文章

  • YLazy Web Page Test , 网页性能测试平台

    摘要:网页性能测试平台核心技术使用框架开源工程源码关于作者陈光剑,花名之剑,一剑江苏东海人号行走江湖一剑客,字之剑。程序员,诗人作家。 YLazy Web Page Test , 网页性能测试平台 核心技术 phantomjs harviewer 使用框架 Springboot,Spring scala,Java JPA Mysql jquery bootstrap adminLTE ...

    haobowd 评论0 收藏0
  • YLazy Web Page Test , 网页性能测试平台

    摘要:网页性能测试平台核心技术使用框架开源工程源码关于作者陈光剑,花名之剑,一剑江苏东海人号行走江湖一剑客,字之剑。程序员,诗人作家。 YLazy Web Page Test , 网页性能测试平台 核心技术 phantomjs harviewer 使用框架 Springboot,Spring scala,Java JPA Mysql jquery bootstrap adminLTE ...

    hzc 评论0 收藏0
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias

    摘要:函数式编程与面向对象编程的类型关联之剑目录类型关联关键字里的类型,除了在定义时会产生类型,还可以通过关键字来声明类型。复合类型与关键字这种形式的类型称为复合类型或者也叫交集类型。 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias 之剑 2016.5.4 23:55:19 类型关联 Type Alias type关键字 scala里的类型,除了在定义clas...

    wupengyu 评论0 收藏0
  • 如何实现一个基本的微信文章分类器

    摘要:本文源地址,转发请注明该地址或地址,谢谢微信公众号发布的文章和一般门户网站的新闻文本类型有所不同,通常不能用现有的文本分类器直接对这些文章进行分类,不过文本分类的原理是相通的,本文以微信公众号文章为对象,介绍朴素贝叶斯分类器的实现过程。 本文源地址:http://www.fullstackyang.com/...,转发请注明该地址或segmentfault地址,谢谢! 微信公众号发布的...

    dackel 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<