博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于call()的this指向研究
阅读量:7139 次
发布时间:2019-06-28

本文共 1194 字,大约阅读时间需要 3 分钟。

以前看过一些文档,一直以为自己懂了,今天一看其实懂的还是比较模凌两可。先说一些代码吧

fun.call(obj)

var a = {	message: 'aa'}var b = function () {	console.log(this.message)}b.call(a);   //aa,这个很简单

obj.call(obj)

var a = {	say: function () {		console.log(this.message)	}}var b = {	message: 'bb'}a.say.call(b)  //bb,这个也很简单

fun.call(fun)

function a () {	this.message = "aa";}function b () {	this.message = "bb";	this.say = function () {		console.log(this.message)		console.log(this)	}}var c = new a();b.call(a)  //bba.say();  //函数a,这个结果和console.log(a)相同b.call(c);  //bbc.say();   //对象a,但是内容是b函数的,这个结果和console.log(c)相同//console  bb;function a() {	this.message = "aa";};bb;a {	message: "bb", 	say: function()};

我不知道你们有没有看懂这个输出,反正我一开始完全懵比。

当浏览器执行b.call(a)这一步的时候,a.say()的this指向指向b。

当浏览器执行b.call(c)这一步的时候,相当于执行了

this.message = "bb";this.say = function () {       console.log(this.message)       console.log(this)}

 说着说着,我又晕了。

反正当fun.call(fun)的时候,this指向前面那个fun。

当后面的fun为构造函数的时候,加入a.call(b),b为构造函数的时候,b会拥有a的方法,如果有重合的,则a的覆盖b的。

但是如果b不是构造函数的时候,b自身不会拥有a的方法,但是可以调用a的方法。

 

不过说句实话,在平常使用call和apply的时候,fun.call(fun)的例子也忒少了,基本都是使用obj.call(obj)。今天主要是被fun.call(fun)这个东西搞了。头都晕了。

如果有大神知道这其中的原理,就好好的帮我们解答一下啊!!谢谢了0.0

转载于:https://www.cnblogs.com/yhspehy/p/6689989.html

你可能感兴趣的文章
.config 和 kconfig以及 makefile的关系
查看>>
一句话总结殊途同归的设计模式:工厂模式=?策略模式=?模版方法模式
查看>>
MobIM-API说明
查看>>
关于Java多线程问题的40个总结与思考
查看>>
浅析 Spark Shuffle 内存使用
查看>>
【干货】SSM,Jquery, Bootstrap从零打造一个论坛系统
查看>>
HBASE引起线上服务宕机的排查
查看>>
Python用不好?看官方中文文档啦
查看>>
OLED屏幕到底占了多少智能手机呢?
查看>>
Flutter基础-(3)Widget之文本Text
查看>>
“醉牛前端”重新起航!
查看>>
5分钟搞懂z-index与层叠上下文
查看>>
Flutter自习感受
查看>>
在近期任务列表显示单个APP的多个Activity
查看>>
react native 之flatlist 不显示,需要碰/滑一下才会显示。
查看>>
ES6扩展运算符(...)的使用
查看>>
CSS实现循环无缝滚动
查看>>
白鹭引擎开发飞机大战详尽教程(一创建场景)
查看>>
微信小程序搭建mpvue+vant
查看>>
java 多线程
查看>>