thiskeyword的使用

在JavaScript中使用thiskeyword表示调用方法的对象,这与大部分面向对象语言是一样的。可是因为callapplybind等函数的影响。我们能够改变this所代指的对象。

  • 使用call或者apply调用的函数中,this代指传入的第一个參数对象,假设传入null或者undefined。则表示全局对象(window)。
  • 通过对象调用函数(方法),函数中的this表示调用该函数的对象。

  • 单独调用的函数中this表示全局对象。
var myObject = {
sayHello: function() {
console.log("Hi, my name is " + this.myName);
},
myName: "Rebecca"
}; var secondObject = {
myName: "Colin"
}; myObject.sayHello(); //"Hi, my name is Rebecca"
myObject.sayHello.call(secondObject); //"Hi, my name is Colin"
var myName = "the global object";
var sayHello = function() {
console.log("Hi, my name is " + this.myName);
};
var myObject = {
myName = "Rebecca"
};
var myObjectHello = sayHello.bind(myObject); sayHello(); //"Hi, my name is the global object"
myObjectHello(); //"Hi, my name is Rebecca"

JavaScript能够在执行中为对象动态加入函数,这样也会导致this代指的对象发生变化。

var myName = "the global object";
var sayHello = function() {
console.log("Hi, my name is " + this.myName);
};
var myObject = {
myName: "Rebecca"
};
var secondObject = {
myName: "Colin"
}; myObject.sayHello = sayHello;
secondObject.sayHello = sayHello; sayHello(); //"Hi, my name is the global object"
myObject.sayHello(); //"Hi, my name is Rebecca"
secondObject.sayHello(); //"Hi, my name is Colin"

还有。不能直接给处于较深的名字空间的函数添加短引用,会导致this变为全局对象,可是能够对它所处的对象设置短引用。

var myNamespace = {
myObject: {
sayHello: function() {
console.log("Hi, my name is " + this.name);
},
myName: "Rebecca"
}
}; var hello = myNamespace.myObject.sayHello;
hello(); //"Hi, my name is undefined" var obj = myNamespace.myObject;
obj.sayHello(); //"Hi, my name is Rebecca"

Tips

callapply的差别是,apply接收两个參数:this和函数的參数数组;而call的第一个參数为this,可是后面是函数的參数列表。

本文档由长沙戴维营教育整理。

Jquery第四课 Javascript中this的使用方法的更多相关文章

  1. Jquery中$(document).ready()与传统JavaScript中的window.onload方法的区别(2016/8/3)

    Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 1.执行时间       ...

  2. Jquery中$(document).ready() 和 JavaScript中的window.onload方法 比较

    Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的.   1.执行时间 win ...

  3. JavaScript中事件绑定的方法总结

    最近收集了一些关于JavaScript绑定事件的方法,汇总了一下,不全面,但是,希望便于以后自己查看. JavaScript中绑定事件的方法主要有三种: 1 在DOM元素中直接绑定 2 JavaScr ...

  4. JavaScript中Object.prototype.toString方法的原理

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. ? 1 2 var arr = []; console.lo ...

  5. JavaScript中this的使用方法总结

    JavaScript中this的使用方法总结 在JavaScript中,this的使用分为四种场景,具体请参考阮一峰老师关于this的讲解 第一种情况是纯函数使用 var x =1 ; functio ...

  6. Javascript中alert</script>的方法

    Javascript中alert</script>的方法: <%@ page language="java" import="java.util.*&q ...

  7. URL地址中中文乱码详解(javascript中encodeURI和decodeURI方法、java.net.URLDecoder.encode、java.net.URLDecoder.decode)

    引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生了,该如何解决呢?且听本文详细道来. ...

  8. javaScript中的indexOf使用方法

    JavaScript中的indexOf使用方法 概述 indexOf大小写敏感,其中的O要大写 对于字符串而言 indexOf返回字符串第一次出现的位置,若没有出现返回-1 1 var str = & ...

  9. Javascript中定时器的使用方法

    Javascript中定时器的使用方法 1.间隔定时器(每隔一段时间执行一次代码) 格式:setInterval(函数,时间) //时间单位是毫秒,每隔设置的时间执行函数里的内容一遍(一直执行) // ...

随机推荐

  1. CREATE TABLE AS - 从一条查询的结果中创建一个新表

    SYNOPSIS CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name [ (column_name [, ...] ...

  2. CREATE SEQUENCE - 创建一个新的序列发生器

    SYNOPSIS CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalu ...

  3. Java基础(十二)--clone()方法

    Clone在Java中就是用来复制对象,通过分配一个和源对象相同大小的内存空间,然后创建一个新的对象,那么他和=的区别在哪? 通过=实现对象拷贝: @Data @NoArgsConstructor @ ...

  4. 用 vue cli 脚手架搭建单页面 Vue 应用(进阶2)

    1.配置 Node 环境. 自行百度吧. 安装好了之后,打开 cmd .运行 node -v .显示版本号,就是安装成功了. 注:不要安装8.0.0以上的版本,和 vue-cli 不兼容. 我使用的 ...

  5. java图片放大或缩小

    package org.jimmy.autotranslate20181022.utils; import java.awt.Graphics; import java.awt.image.Buffe ...

  6. Domain Adaptation论文笔记

    领域自适应问题一般有两个域,一个是源域,一个是目标域,领域自适应可利用来自源域的带标签的数据(源域中有大量带标签的数据)来帮助学习目标域中的网络参数(目标域中很少甚至没有带标签的数据).领域自适应如今 ...

  7. 第3节 mapreduce高级:8、9、自定义分区实现分组求取top1

    自定义GroupingComparator求取topN GroupingComparator是mapreduce当中reduce端的一个功能组件,主要的作用是决定哪些数据作为一组,调用一次reduce ...

  8. [Luogu] P1865 A % B Problem

    题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对于每次询问输出个数 t,如l或r∉[1,m]输出 Cros ...

  9. Error opening session. Cause: java.lang.NullPointerExcept.

    在学mybatis时遇到这个问题,后面发现时打错了一个字母,发现后分享出来,如果发现这个错误也能够更好的排除错误. 如图可以发现我不小心把default打成了defaule所以出现了这个错误,也找了好 ...

  10. 基于Redis的三种分布式爬虫策略

    前言: 爬虫是偏IO型的任务,分布式爬虫的实现难度比分布式计算和分布式存储简单得多. 个人以为分布式爬虫需要考虑的点主要有以下几个: 爬虫任务的统一调度 爬虫任务的统一去重 存储问题 速度问题 足够“ ...