javascript有关this的那些事(某渣提出的问题)
某人提出
请教下谁能解释下这个值
var name = "The Window";
var object = {
name: "My Object",
getName: function () {
return this.name;
}
};
alert((object.getName = object.getName)());
--------The Window
经过解释之后
object.getNameFunc()(); 我理解是the window,
但是(object.getName = object.getName)() 怎么也是the window呢?
var a = 1;
a = a返回啥,你就知道为什么是the window了
最后某神举例
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return this.name;
}
};
var a = object.getNameFunc;
alert(a());//The Window
alert(object.getNameFunc()); //My Object
最后某神解释
所以执行a()的时候this指向window
this.name就是window.name
object.getName = object.getName;
alert(object.getName()); //My Object
alert((object.getName = object.getName)());//"The Window"
还是不明白 为啥第一个是obj 第二个是window
这个解释怎么理解啊
最后他明白了
某渣:我大概明白了 执行
alert((object.getName = object.getName)); 返回
function () {
return this.name;
}
这里this 就是window了
圆满解决
某神总结
当一个函数作为函数而不是方法来调用的时候,this指向的是全局对象
当函数作为某个对象的方法来调用时,this指向那个对象
object.getNameFunc() ,此时的 object.getNameFunc 为引用类型,其 base 为 object,this 指向的是 base,所以返回 object.name 的值
name = object.getNameFunc, test 作为标识符,生成了其他引用类型的值,此时 base 已经从 object 重置为 null,也就是会指向 global(window),所以返回的是 window.name 的值。
问题的关键在于「引用类型(type Reference)的中间值发生改变」
javascript有关this的那些事(某渣提出的问题)的更多相关文章
- JavaScript模块化开发的那些事
模块化开发在编程开发中是一个非常重要的概念,一个优秀的模块化项目的后期维护成本可以大大降低.本文主要介绍了JavaScript模块化开发的那些事,文中通过一个小故事比较直观地阐述了模块化开发的过程. ...
- JavaScript中继承的那些事
引言 JS是一门面向对象的语言,但是在JS中没有引入类的概念,之前特别疑惑在JS中继承的机制到底是怎样的,一直学了JS的继承这块后才恍然大悟,遂记之. 假如现在有一个“人类”的构造函数: functi ...
- 关于javaScript事件委托的那些事
今天是第一次写稿,还是有那么一丢丢小鸡冻...回归正题啦... 关于javaScript事件委托不得不说的那些事,为什么要使用事件委托? 我们可以这么说,假设老板要分配一项任务,首先要秘书叫A君来到办 ...
- 学javascript必须要知道的事
第一:变量声明 在使用javascript时使用变量时首先做的是声明变量,变量声明的关键字是var. 例子: var i; var sum; 也可以多个变量声明: var i,sum; 还可以在声明时 ...
- (转载)JavaScript中面向对象那点事
鉴于自己在JavaScript这方面比较薄弱,所以就找了一本书恶补了一下(被称为犀利书的JavaScript权威指南).书的内容虽然多了点,但这也充分说明了js中的东西还是挺多的.虽然我们的定位不是前 ...
- 初学JavaScript须知道的七件事
1.1.缩略标记 //定义对象 //var car = new Object(); //car.colour = 'red'; //car.wheels = 4; //car.hubcaps = 's ...
- 关于Javascript你可能不知道的事
NaN表示一个不能产生正常结果的运算结果.它不等于任何值,包括它自己.可以用isNaN(number)来检测. 同Java中的字符串一样,JS中的字符串是不可变的.也就是说一旦字符串被创建,就无法改变 ...
- JavaScript中面向对象那点事
鉴于自己在JavaScript这方面比較薄弱.所以就找了一本书恶补了一下(被称为犀利书的JavaScript权威指南).书的内容尽管多了点,但这也充分说明了js中的东西还是挺多的.尽管我们的定位不是前 ...
- javascript的原型链那些事
如果你对javascript的原型链还有任何疑问,请看这篇文章 进入主题 前言 原型链的规则不百分百适用于所有情况 显式原型:prototype,是一个对象{} 隐式原型:__proto__,是一个对 ...
随机推荐
- 2014.8.23 Research Meeting Report
Dear All: It was good talk yesterday. However, I want to emphasize that, finally it is the *work* an ...
- 安装Ubuntu后要做的事
优化 删除libreoffice sudo apt-get remove libreoffice-common 删除Amazon sudo apt-get remove unity-webapps-c ...
- PHP学习 安装环境和语法学习
要回归技术了,昨天下午专门去深圳大学城图书馆借书,甚是漂亮 禁不住搞了几张照片 在图书馆里面的书真多,图书馆环境真好,清华大学 北京大学研究生院的学生们有福了,最后一句深圳政府真尼玛有钱,下图是图书馆 ...
- PAT甲题题解1099. Build A Binary Search Tree (30)-二叉树遍历
题目就是给出一棵二叉搜索树,已知根节点为0,并且给出一个序列要插入到这课二叉树中,求这棵二叉树层次遍历后的序列. 用结构体建立节点,val表示该节点存储的值,left指向左孩子,right指向右孩子. ...
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
秦鼎涛 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验一 通过汇编一个简单的C程序,分析汇编代码 ...
- 四则运算app总结
程序有难度和单项练习,但设计了每次只出5到题,如果做错的话会把错题加入到数据库中,然后通多错题巩固选项可以对错题进行训练. 代码: 普通选项代码: package com.example.szys; ...
- Resharper简单安装及代码覆盖率的测试
Resharper简单安装及代码覆盖率的测试 测试环境:VS 2015 专业版 一.下载Resharper 官方链接:https://www.jetbrains.com/resharper/ 点击下载 ...
- Js单元测试工具 以及 粗浅的对我的快乐运算进行测试
1. Karma的介绍 Karma是Testacular的新名字,在2012年google开源了Testacular,2013年Testacular改名为Karma.Karma是一个让人感到非常神秘的 ...
- Linux系统编程手册-源码的使用
转自:http://www.cnblogs.com/pluse/p/6296992.html 第三章后续部分重点介绍了后面章节所要使用的头文件及其实现,主要如下: ename.c.inc error_ ...
- jmeter正则提取值 同级目录下的值
https://www.v2ex.com/api/nodes/show.json?name=python 接口返回: { "avatar_large": "//cdn.v ...