this 关键字理解

下面代码的运行结果是什么并做解释。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

var fullname = ‘John Doe‘;

var obj = {

fullname: ‘Colin Ihrig‘,

prop: {

fullname: ‘Aurelio De Rosa‘,

getFullname: function() {

return this.fullname;

}}};

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

var test = obj.prop.getFullname;

console.log(test());

答案

代码输出:Aurelio De Rosa 和 John Doe

理由是,Javascript中关键字this所指代的函数上下文,取决于函数是怎样被调用的,而不是怎样被定义的

在第一个console.log(),getFullname()被作为obj.prop对象被调用。因此,当前的上下文指代后者,函数返回这个对 象的fullname属性。相反,当getFullname()被赋予test变量,当前的上下文指代全局对象window,这是因为test被隐式地作 为全局对象的属性。基于这一点,函数返回window的fullname,在本例中即为代码的第一行。

时间: 2024-08-30 18:15:43

this 关键字理解的相关文章

Java线程工作内存与主内存变量交换过程及volatile关键字理解

Java线程工作内存与主内存变量交换过程及volatile关键字理解 1. Java内存模型规定在多线程情况下,线程操作主内存变量,需要通过线程独有的工作内存拷贝主内存变量副本来进行.此处的所谓内存模型要区别于通常所说的虚拟机堆模型: 2. 线程独有的工作内存和进程内存(主内存)之间通过8中原子操作来实现,如下图所示: 原子操作的规则(部分): 1) read,load必须连续执行,但是不保证原子性. 2) store,write必须连续执行,但是不保证原子性. 3) 不能丢失变量最后一次ass

C static 关键字理解

今天来看一下这么一个程序. #include<stdio.h> int count =1; int fun(void) { static int count =10; return count--; } int main(void) { printf("global\t\tlocalstatic\n"); for(;count<=10;count++) printf("%d\t\t%d\n",count,fun()); return 0; } 运行

C#中yield关键字理解

yield关键字之前用得较少,但是在做项目开发的过程中也遇到了,当时有点迷惑,就顺便研究学习了一下,以下是个人理解,不到之处欢迎拍砖!废话就到这,上代码: class Program { static void Main(string[] args) { string[] strs = new string[] { "1", "2", "3", "4" }; foreach (var item in GetInts(strs)

Java中synchronized关键字理解

好记性不如烂笔头~~ 并发编程中synchronized关键字的地位很重要,很多人都称它为重量级锁.利用synchronized实现同步的基础:Java中每一个对象都可以作为锁.具体表现为以下三种形式. (1)对于普通同步方法,锁是当前实例对象. (2)对于静态同步方法,锁是当前类的Class对象. (3)对于同步方法块,锁是synchronized括号里配置的对象. 一.普通同步方法 使用synchronized关键字修饰一个普通方法,锁住的是当前实例的对象.当synchronized锁住该对

Hibernate中的一些关键字理解

ORM的理解: ORM(Object/Relation Mapping): 对象/关系映射ORM 主要解决对象-关系的映射: ORM的思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作.ORM 采用元数据来描述对象-关系映射细节, 元数据通常采用 XML 格式, 并且存放在专门的对象-关系映射文件中.元数据:描述数据的数据, Object.hbm.xml文件: Hibernate 将根据这个映射文件来生成各种 SQL 语句 映射文件的扩展名

java的this关键字理解

1.java提供了一个this关键字,this关键字总是指向调用该方法的对象.根据this出现位置的不同,this作为对象的默认引用有两种情形.a).构造器中引用该构造器正在初始化的对象.(this总是引用该构造器正在初始化的对象.比如,局部变量和全局变量重名,this总是引用构造器的局部变量).b).在方法中引用调用该方法的对象.this关键字最大的作用就是让类中一个方法,访问该类的另一个方法或者实例变量.(java允许对象的一个成员直接调用另一个成员,可以省略this前缀.大部分时候,一  

Java volatile 关键字 理解

Java   volatile 理解 Volatile 1 如果一个字段被申明为volatile,那么Java内存模型则可以保证多个线程所看到的值是一致的. 2  禁止指定重排. 3  volatile只能保证可见性,不能保证原子性 可见性实现原理: volatile能够保证可见性,那么它是如何实现可见性的呢?以X86处理器为例,在对volatile修饰的变量进行写操作时,通过编译器生成反汇编指令后,会发现会多一条Lock前缀,就是由于这条Lock前缀所实现的可见性.Lock前缀在多核处理器中会

Static和Extern关键字理解

1.当static关键字修饰局部变量时,只会初始化一次且在程序中只有一份内存: @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; [self test]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // D

Volatile关键字理解

Volatile定义 为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量.Java语言提供了volatile,在某些情况下比锁更加方便.如果一个字段被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一致的. 特点 volatile修饰的共享变量,能保证可见性,不能保证原子性 什么是可见性? 一个线程对共享变量值得修改,能够及时的被其他线程读取到.比如共享变量count=0:线程A修改为1,那么线程B拿到的count值应该是A修改过后的1,而不是