this在JavaScript中的工作范围

在一个函数中,this的行为,取决于JavaScript函数的调用方式和定义方式,而不仅仅是看它如何被定义的。

var fullname = 'Fu';
var obj = {
fullname: 'Yin',
prop: {
fullname: 'Gardenia',
getFullname: function() {
return this.fullname;
}
}
};

运行下面代码:

console.log(obj.prop.getFullname());

Gardenia  //输出

运行下面代码:

var test = obj.prop.getFullname;

console.log(test());

Fu     //输出

运行下面代码:

console.log(test.call(obj.prop));

Gardenia //输出

运行下面代码:

console.log(test.call(obj));

Yin   //输出

运行下面代码:

console.log(test.call());

Fu   //输出

运行下面代码:

console.log(test.call(window));

Fu   //输出

总结:


Javascript的this遵从就近原则,不然就是window。

this在JavaScript中的工作范围的更多相关文章

  1. [翻译]解释JavaScript中的类型转换

    原文地址:JavaScript type coercion explained 类型转换是将值从一种类型转换为另一种类型的过程(比如字符串转换为数值,对象转换为布尔值,等等).任何类型,无论是原始类型 ...

  2. JavaScript中this的工作原理以及注意事项

    在JavaScript中,this 的概念比较复杂.除了在面向对象编程中,this 还是随处可用的.这篇文章介绍了this 的工作原理,它会造成什么样的问题以及this 的相关例子. 要根据this  ...

  3. 【JavaScript】JavaScript中的Timer是怎么工作的( setTimeout,setInterval)

    原文(http://www.yeeyan.org/articles/view/luosheng/24380) 作为入门者来说,了解JavaScript中timer的工作方式是很重要的.通常它们的表现行 ...

  4. 浏览器中“JavaScript解析器”工作原理

    浏览器在读取HTML文件的时候,只有当遇到<script>标签的时候,才会唤醒所谓的“JavaScript解析器”开始工作. JavaScript解析器工作步骤: 1.“找一些东西”: v ...

  5. [ Javascript ] JavaScript中的定时器(Timer) 是怎样工作的!

    作为入门者来说.了解JavaScript中timer的工作方式是非常重要的.通常它们的表现行为并非那么地直观,而这是由于它们都处在一个单一线程中.让我们先来看一看三个用来创建以及操作timer的函数. ...

  6. javaScript中闭包的工作原理

    一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...

  7. 详解javascript中this的工作原理

    在 JavaScript 中 this 常常指向方法调用的对象,但有些时候并不是这样的,本文将详细解读在不同的情况下 this 的指向. 一.指向 window: 在全局中使用 this,它将会指向全 ...

  8. javascript中的操作符详解1

    好久没有写点什么了,根据博主的技术,仍然写一点javascript新手入门文章,接下来我们一起来探讨javascript的操作符. 一.前言 javascript中有许多操作符,但是许多初学者并不理解 ...

  9. 前端开发:Javascript中的数组,常用方法解析

    前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...

随机推荐

  1. Config the Android 5.0 Build Environment

    In this document Choosing a Branch    Setting up a Linux build environment        Installing the JDK ...

  2. 性能测试中用LambdaProbe监控Tomcat Tomcat和Probe的配置

    转载:http://bbs.51testing.com/thread-90047-1-1.html 性能测试中用LambdaProbe监控TomcatLambdaProbe 是一款强大的免费开源工具, ...

  3. iOS-制作Framework

    步骤 打开Xcode,创建新工程.手下留情,请先看图! 在TARGETS下选中工程,在Build Settings下更改几个参数. 更改参数 在Architectures下增加armv7s,并选中.将 ...

  4. Js获取下拉框的值和文本select

    $("#camera").change(function () {        var obj = this;        $("#camera_Name" ...

  5. 关于struts2的上传和下载

    1. 1文件上传技术: JSPSmartUpload:应用在Model1年代.(嵌入到JSP) FileUpload:应用在Model2年代. Servlet3.o:完成文件上传. Struts2框架 ...

  6. SSRS中加入书签功能及数据集窗口

    SSRS在使用过程中,是比较好用的,但如果报表过长,则会比较难看到想看的内容,在SSRS中有书签功能,可以将报表直接直接跳转至书签位置,这样用户可以比较精准的定位到关注位置.使用一个文本框或是图片,再 ...

  7. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

  8. margin,padding之我见

    在网页布局中,margin和padding绝对会占很重要的作用,但是在实际的项目中,很多新手前端程序员们往往不能正确的使用它们,导致会出现一些不必要的麻烦,下面是我在前几天的项目中遇到的一些问题,以及 ...

  9. 总结html5-canvas学习笔记

    canvas是html5中很重要的一部分,我们可以用它来绘制各种平面图形, 3d图,动画等等.每每看到网上超炫的html5页面,首先立马下载下来,心里想着有一天自己也可以做出这样酷炫的效果,骚年你是不 ...

  10. ant design 树形组件怎么使用

    getDefaultProps doesn't work with ES6 syntax; warning is not helpful 解决后: 参考地址:https://github.com/fa ...