“茴”字有四种写法,this也是一样
说到这个地方又想起以前高中还是初中学的《孔乙己》这个梗,但是这里的this显然实用性比那个要大很多,哈哈。
简单来说,this有四种应用场景,分别是在构造函数上、对象属性中、普通函数中、call和apply方法中。
先来看第一种,构造函数:
function Foo(name){
this.name=name;
}
var f=new Foo();
在这里,this指向的是新对象f。而在对象属性中,这又有了一点不同。
var obj={
a:"funny",
b:function(){
console.log(this.a);
}
};
obj.b();//打印出funny
这里我们把b作为obj对象的一个属性来执行,执行的时候this就指向当前这个对象obj,所以在控制台会打印出funny;接下来看第三种情况,就那这个例子来说,我们稍微改动一下代码。
var obj={
a:"funny",
b:function(){
console.log(this.a);
}
};
var f1=obj.b;
f1(); //打印出undefined
在第九行中,我们执行f1发现根本取不到“funny”,而是打印出undefined。原因就是当我们这样作为一个普通函数执行的时候,this指向window对象的,而window对象下找不到a这个属性,于是就打印出undefined。顺便说一句,如果是找不到一个属性,会返回undefined;而找不到一个变量,则会返回“xxx is not defined”。
最后一种情况,在call和apply中。其实我们可以把call和apply当成一种特殊的执行方法。可以叫它“能自定义this指向的执行方法”,这个名字听起来是不是有点长,但原理的确如此。就是说当我们直接来一个f1()的时候,它的this默认为window。要改变怎么办呢?就要来点特殊执行手段,在中间多插入一个单词---call或者apply。
var obj={
a:"funny",
b:function(){
console.log(this.a);
}
};
var f1=obj.b;
f1.call({a:"serious"}); //改变了this的指向,指向这个新对象,打印出serious
还是这段代码,不过我稍微改了下,把它的this的指向扭了一下,最终指到我自己写的{a:"serious"}这个对象,然后就可以把serious打印出来了。apply和call差不多,因为这里我只传了一个参数,所以没法演示。call-->第一个参数为this,后面为其他参数;apply-->第一个参数为this,后面为用数组包裹起来的其他参数。就这么点区别。
应该还不错吧(`・ω・´)
“茴”字有四种写法,this也是一样的更多相关文章
- C#中克隆随机数的三种方法(为什么我想到了茴字的四种写法
C#中的Random类可以用来产生伪随机数(正确的废话 伪随机数的一个性质就是给定一个初始种子,那么产生的随机数列都是相同的,这个性质非常适合用在不同环境之间同步逻辑的场景. 最近有一个要克隆当前随机 ...
- python:函数中五花八门的参数形式(茴香豆的『回』字有四种写法)
毫不夸张的说,python语言中关于函数参数的使用,是我见过最为灵活的,随便怎么玩都可以,本文以数学乘法为例,演示几种不同的传参形式: 一.默认参数 def multiply1(x, y): retu ...
- 讨论下茴香逗的茴字有几种写法,javascript字符串数组查找“indexOf"的替代方式。
- 【JAVA8】Set排序四种写法
工作中遇到,写了很久以前的写法,师兄给了很多建议,于是整理了一下.孔子曰:"你知道茴香豆的茴字有几种写法吗?" 第一种,平常的写法: public class App { publ ...
- 茴香豆的“茴”有四种写法,Python的格式化字符串也有
茴香豆的"茴"有四种写法,Python的格式化字符串也有 茴香豆的"茴"有四种写法,Python的格式化字符串也有 被低估的断言 多一个逗号,少一点糟心事 上下 ...
- Python中斐波那契数列的四种写法
在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,“你学过数据结构吗?”我略略点一点头 ...
- swap函数的四种写法
swap 函数的四种写法 (1)经典型 --- 嫁衣法 void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } ( ...
- Android代码规范----按钮单击事件的四种写法
[前言] 按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类. 按钮多的时候一般选择第四种写法. 一.第一种写法:在XML文件中声明onClick属性(很少用) 在XM ...
- JS 获取星期几的四种写法
今天是星期几的4种JS代码写法,有需要的朋友可以参考一下 第一种写法 复制代码代码如下: var str = ""; var week = new Date().getDay() ...
随机推荐
- 用thinkphp开启伪静态,用wamp开启很快搞定;但是用phpstudy总是开启失败,为什么?
https://segmentfault.com/q/1010000005100662 thinkphp应用的根目录下.htaccess中的内容是: <IfModule mod_rewrite. ...
- redis常见命令使用
这篇经验主要介绍了Redis常见用的一些操作命令.这篇例子是在windows上操作的.linux类似.写的一些基础,大神就别看了. 工具/原料 redis windows 方法/步骤 1 可以 ...
- javascript中window.location.search的用法和作用。
用该属性获取页面 URL 地址: window.location 对象所包含的属性 属性 描述 hash 从井号 (#) 开始的 URL(锚) host 主机名和当前 URL 的端口号 hostnam ...
- Python3基础知识
1.查看关键字 Python3查看关键字要先导入模块keyword,然后运用keyword的属性kwlist获取 >>> import keyword>>> key ...
- Linux - 在Ubuntu下永久修改主机名
查看主机名 root@jiqing:~# hostname jiqing 1.临时生效 root@jiqing:~# hostname jq root@jiqing:~# hostname jq 重新 ...
- 嵌入式QT移植
1 开发环境 目标版:FS4412(Cortex-A9)开发板 交叉工具链:arm-linux-gcc 4.6.4 版本 Qt:qt-everywhere-opensource-src-5.4.2. ...
- HTML学习(二)
表格和列表 <!-- /* @dl→definition list(定义列表),ul→unordered list(无序列表),ol→ordered list * @一个完整的表格.table. ...
- redis五大类型用法
Redis五大类型:字符串(String).哈希/散列/字典(Hash).列表(List).集合(Set).有序集合(sorted set)五种Controller:@Resource RedisTe ...
- form表单action=""的作用
看项目时发现action="",可仍旧提交到后台相关页面了.查了一下,action=""相当于当前页面刷新,不过页面按照form表单提交参数到后台@参考文章
- j2e中操作EXCEL
在j2e中操作excel,无非2种情况,在这里我贴部分代码做个例子就OK,不管是导入和导出都是操作的都是流 1,导入,浏览器输入EXCEL到java后台解析 package action; impor ...