this 代表了当前的对象,哪个对象调用了this所在的函数,this就代表了哪个对象;

例1:

        function fn(){
var a = 1;
console.log(this)
}
fn()

控制台打印结果: Window {window: Window, self: Window, document: document, name: '', location: Location, …}

此时,是Window对象调用了fn这个函数,所以this指向了Window。

例2:

var obj = {
b : 2,
name : "lili",
fn:function(){ var a = 3; console.log(this); } }
obj.fn()

控制台打印结果: {b: 2, name: 'lili', fn: ƒ}

此时是obj对象调用了函数fn,因此this指向了obj,控制台返回的是obj整个对象。

例3:

        var obj2={fn:function(){console.log(this,1111)}}
var arr=[]
arr[0]=100
arr[1]=obj2.fn console.log(arr[1])//window obj2
arr[1]()
obj2["fn"]()

打印结果:

调用者是arr时,this就指向了arr;

调用者是obj2时,this就指向了obj2。

例4:

        var obj = {
name: "father",
son: {
name: "son",
say: function () {
console.log(this)
}
}
}
obj.son.say() //调用者时obj.son var a = obj.son.say
a(); //调用者是window
var arr = [a]
arr[0](); //调用者是arr

结果:

例5:

找到函数的真正调用者

        var obj = {
name: "karen",
say: function () {
console.log(this) //obj
function fn(a) {
console.log(a, this) //obj winodw
}
fn(this) //fn(obj)
}
}
obj.say() //obj fn() // window
obj.fn() //obj
obj.xx.xx2() //obj.xx
(function () {})() //window
fn()() //window
fn()[1]() // fn()返回的数组
this只需要看离最近(嵌套)的function的这个单词的调用者。
 
        var name = 'lili';
var obj = {
name: 'fa',
prop: {
name: 'sn',
getname: function () {
return this.name;
}
}
};
console.log(obj.prop.getname()); //调用者是obj.prop; sn
var test = obj.prop.getname; //在window环境下定义的test;
console.log(test()); //调用者是window; lili;

        var name = "lili";
var obj = {
name: "karen",
fn: function () {
console.log(this.name)
}
}
var a = obj.fn
a() //window; lili

JS:this关键字1的更多相关文章

  1. js 中关键字 this的用法

    <1>  js中this 的用法?  (key:函数是由调用的,四种情况标红可知) (http://www.ruanyifeng.com/blog/2010/04/using_this_k ...

  2. js基础 1.简单js 语法 关键字 保留字 变量

    简单js JavaScript 是一个松散性的语言 对象属性却不想c中的结构体或者c++ 和java的对象, 对象继承机制 使用原型的prototype(原型链),js的分为三部分ECMAScript ...

  3. day1——js方法关键字的问题(onclick点了没反应)

    <a href="javascript:void(0);"   onclick="search();" >提交</a> js代码: fu ...

  4. js常用关键字和函数

    document.createElement("div"): 创建一个div元素申明一个变量 document.body.appendChild(div);   将创建好的div添 ...

  5. js 查找关键字

    查找:4种: 1. 查找固定关键字,仅返回位置,可指定开始位置: var i=str.indexOf("kword"[,starti]); str.lastIndexOf(&quo ...

  6. JavaScript高级程序设计(五): js的关键字instanceof和typeof使用

    JavaScript中instanceof和typeof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: 一.typeof 1.含义:typeof返回一个表达式的数据类型的字符 ...

  7. ASP.NET给前端动态添加修改 CSS样式JS 标题 关键字

    有很多网站读者能换自己喜欢的样式,还有一些网站想多站点共享后端代码而只动前段样式,可以采用动态替换CSS样式和JS. 如果是webform 开发,可以用下列方法: 流程是首先从数据中或者xml读取数据 ...

  8. [js]this关键字代表当前执行的主体

    点前是谁,this就是谁 <div id="div1" class="div1"></div> <div id="div ...

  9. js new关键字

    实现new 关键字只需4步 1. 声明一个对象: 2. 把这个对象的__proto__ 指向构造函数的 prototype; 3. 以构造函数为上下文执行这个对象: 4. 返回这个对象. 简洁的代码示 ...

  10. JS的关键字this

    1.关于this this关键字是JavaScript中最复杂的机制之一.它是一个很特别的关键字,被自动定义在所有函数的作用域中. 1.1 为什么要用this? this提供了一种更优雅的方式来隐式地 ...

随机推荐

  1. 脏数据清洗,pandas.apply()的应用

    原数据如下所示: IMAGETYPE count .?+? 1713 Jh.5? 100 .??U 38 .11.1 1 .13.1 1 .15.11 2 我需要对数据内的带有特殊符号,且第一个逗号 ...

  2. jquery 日期插件datePicker使用

    1.将下载下来的DatePicker压缩包解压后整个放入项目中,不可只引入js和css 2.在html中指定input位置加上class="Wdate"(默认样式不加也可正常显示) ...

  3. [转载] go get 拉取第三方包过慢、卡住解决方案

    修改go env,选用国内的代理地址下载.

  4. HCIE笔记-第八节-传输层协议

    传输层:实现"端到端"的服务 应用到应用 端口 = port [逻辑端口] 基于应用级别的互访,就是 端口到端口的互访. 传输层 = 0-65535[端口范围] === TCP/U ...

  5. bootStrap简要和学习笔记

    bootStrap简要和学习笔记前端在学些了html.css.JavaScript三件套后,我们感觉前端变数太多了,需要创造力来设计一些可能经常使用的界面啊.按钮样式啊等,也就有了一些前端的框架,那何 ...

  6. RecyclerView + SQLite 简易备忘录-----下

    最后就是添加备忘录的界面了.同时也是显示备忘录内容的界面. 1.activity_add_info.xml 也是比较简陋的一个页面设计. 顶部是一个自定义的Toolbar,剩下的部分都是ScrollV ...

  7. Java并发编程扩展(线程通信、线程池)

    之前我说过,实现多线程的方式有4种,但是之前的文章中,我只介绍了两种,那么下面这两种,可以了解了解,不懂没关系. 之前的文章-->Java并发编程之多线程 使用ExecutorService.C ...

  8. MySQL 回表

    MySQL 回表 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁. 一.简述 回表,顾名思义就是回到表中,也就是先通过普通索引扫描出数据所在的行,再通过行主键ID 取出索引中未包含的数据.所以回表的产 ...

  9. 携程开源分布式配置系统Apollo服务端是如何实时更新配置的?

    引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...

  10. 编写引入svg

    SVG是一种XML语言,类似XHTML,可以用来绘制矢量图形,例如右面展示的图形.SVG可以通过定义必要的线和形状来创建一个图形,也可以修改已有的位图,或者将这两种方式结合起来创建图形.图形和其组成部 ...