第27天:this(2)

接续昨天的这个例子

function sayHello(){
    console.log(`你好,我是${this.name},今年${this.age}岁`)
};

let p1 ={
        name:'长庚',
        age:18,
        say:sayHello
    };
let p2 ={
        name:'还没下凡的女朋友',
        age:18,
        say:sayHello
    };
p1.say();
p2.say();

我们执行p1.say()里面所执行的sayHello里面的this.name为什麽是拿p1.name呢?
this实际参考的对象跟是否附属在某个物件里面完全没关系,而是依呼叫方式来决定。
在JavaScript中,函式都是Function的实例,所有Function都会有call()方法,可以决定this的参考对象。
例如:

sayHello.call(p1);
sayHello.call(p2);

https://ithelp.ithome.com.tw/upload/images/20201012/20120420mMiUFf7H5F.png

call()第一个参数是用来指定this的参考物件,而之後的参数就依序对应函式引数

function saySomething(str){
    console.log(`${this.name}我啊~,${str}☆`)
};
saySomething.call(p1,'最近刚始玩公主连结');

https://ithelp.ithome.com.tw/upload/images/20201012/20120420vm3aazpnIS.png

前面说call()方法,会决定this的参考对象,所以下面这个写法实际的this还是由call()决定

p1.say.call(p2);

https://ithelp.ithome.com.tw/upload/images/20201012/20120420ynWRPx2yZj.png


<<:  第二十八天:文字排版

>>:  铁人赛Day29-第九章:动画5.1-天气与湾熊1

Day 13 实作调色盘App(1/3)

我们可以藉由小小的调色盘App专案来加强我们对一些元件的认识 1.先新增一个专案 -> Cr...

iOS APP 开发 OC 第二十二天,Portocol

tags: OC 30 day 什麽是Protocol? 作用:专门用来声明一大堆方法。(不能声明属...

Day22|【Git】合并的另一个指令 - Rebase 与取消方式

前面介绍了 git merge 指令合并分支,本篇就来介绍另一种方式: Rebase 。 从 Reb...

多重影分身之术,让你的分身去做事情

影分身之术 网站正式上线运行时,会开始有使用者访问浏览,流量就会开始出现变化,当网站推广新活动或周年...

DAY10 - 如何挑选自学的教材

前言 今天是铁人赛的第十天,要来开始说说大叔的前端之路 并且说明我都看那些教学文件或影片 我是去年中...