JavaScript老梗之this对象
Js中的this关键词貌似是初学者必经的坑 都不例外 我们经常听到其他人说 this对象谁调用指向谁 的确这是最容易理解的 但是我们可以更加深入的去探索下 加深印象以便更加灵活的适用它
这里不得不提下Js的执行环境 它都有一个变量对象(variable object)这个变量对象是代码访问不到的 只存在后台的 保存在内存中的
执行环境顾名思义就是在运行和执行代码的之后才会存在的 例如我们运行浏览器 就相当于创建了全局环境 这个全局环境属于浏览器的 所以浏览器中全局对象是window对象
this,arguments这些内部对象只和Js的执行环境有关和它的声明环境无关 而执行环境又是在代码执行的时候创建的 所以this对象只有在执行运行的时候才确定到底指向什么对象
常用this调用的几个方式
1 作为函数调用
var name = 'zzz' ;
function myFn() {
console.log(this.name) ;
}
myFn() ;//zzz 此时this指向的是window
2作为对象的方法调用 (延续上面例子 我们添加个对象把myFn赋给对象的方法)
var name = 'zzz' ;
function myFn() {
console.log(this.name) ;
}
var obj = {name:'zwq'} ;
obj.myFn = myFn ;
obj.myFn() ;//zwq 通过(.或者[])查找对象属性方法称“方法调用”
3 构造函数中的this(顾名思义可以构造一个对象的函数 也是函数的一种)
function Fn() {
this.name = 'zwq' ;
this.job = 'engineer'
}
var fn = new Fn() ;(没有prototype只有__proto__)
console.log(fn.name)//zwq
适用new操作符创建函数实例的时候 会发生以下几个过程 1.创建一个对象 2。将构造函数的作用域赋给新对象 3.相当于运行构造函数中代码 所以此时this指向了新对象 4.返回新对象
console.log(Fn.__proto__===Function.prototype,Function.prototype.__proto__===Object.prototype,Object.prototype.__proto__===null)//ps:原型链的结构
4 apply和call调用
Js中一切都是对象最为突出的是 函数也是对象 函数对象都拥有call和apply方法 该方法是为了动态改变this而出现的 当某一个对象不想自己写方法 就可以通过apply调用其它对象的方法或者一个函数
function sayName() {
console.log('myname is:'+this.name) ;
}
var student = {
name: 'zwq' ,
age: '20'
}
sayName.apply(student) ;// myname is:zwq 这里我们希望student对象有一个方法而自己又不想重新定义 就可以借助apply和call用其他方法来操作 这里this指向student
总结 时刻记住this的指向不是声明静止的 是动态的 总是随着函数执行的时候绑定!!!!
JavaScript老梗之this对象的更多相关文章
- 老梗新玩「GitHub 热点速览 v.22.34」
作者:HelloGitHub-小鱼干 不知道你是否和我有一样的烦恼,最近的流行梗当自己要用拿来造词时,就陷入了不知道咋"换壳"的尴尬地步.sao-gen-gen 大大减少了你老梗新 ...
- javascript之一切皆为对象3
在前面两个章节“Javascript之一切皆为对象1”和“Javascript之一切皆为对象2”中,曾提到: 1.“一切(引用类型)皆为对象” 2. “每个函数都有一个prototype” 3. “每 ...
- javascript之一切皆为对象2
其实呢,“函数function”和“对象object”之间还有这么一句话:对象是通过函数来创建的,而函数却又是一种对象. 这个函数是一种对象,上节中“Javascript之一切皆为对象1”也清楚的阐述 ...
- Javascript之一切皆为对象1
在javascript的世界里,有这么一句话,一切皆为对象. 但是这个对象,应该怎么理解呢? OMG,难道值类型也是对象?!! 当然,不是. 准确地讲是对于“引用类型”而言. 那,在JavaScrip ...
- 03.JavaScript 面向对象精要--理解对象
JavaScript 面向对象精要--理解对象 尽管JavaScript里有大量内建引用类型,很可能你还是会频繁的创建自己的对象.JavaScript中的对象是动态的. 一.定义属性 当一个属性第1次 ...
- JavaScript中的原型和对象机制
1.对象相关的一些语言特性 JavaScript里所有的东西都是对象, 对象是属性的集合.要知道,函数也是对象, 能够作为变量的值. 返回值. 参数或者属性的值. 函数对象特殊的地方是能通过" ...
- javascript中遇到的字符串对象处理
在javascript中对参数处理: 1 <script> 2 function getParam() 3 { 4 urlInfo=window.location.href; //获取当前 ...
- JavaScript学习06 JS事件对象
JavaScript学习06 JS事件对象 事件对象:当事件发生时,浏览器自动建立该对象,并包含该事件的类型.鼠标坐标等. 事件对象的属性:格式:event.属性. 一些说明: event代表事件的状 ...
- javascript中的内置对象
2015.12.1 javascript中的内置对象 复习: 1.js中的内置函数 alert prompt write parseInt parseFloat eval isNaN document ...
随机推荐
- Asynchronous fs.stat.isDirectory()
function showFile() { for(var i = 0; i< files.length; i++){ var itemFile = files[i]; fs.stat(__di ...
- Python的MySQLdb模块安装
MySQL-python-1.2.1.tar.gz 下载地址:https://pan.baidu.com/s/1kVfH84v 然后解压,打开README(这个其实没有什么鸟用) 里面有安装过程: ...
- Brackets前端开发IDE工具
Brackets是一个开源的前端开发IDE工具,网页设计师和前端开发人员必备的前端开发IDE工具. 它能够使你在开发WEB网站实时预览你的网页,目前版本只适用于Chrome浏览器可以实时预览效果 支持 ...
- <<< MyEclipse软件中的快捷键
-------------------------------------MyEclipse 快捷键1(CTRL)-------------------------------------Ctrl+1 ...
- TCP/IP——基本知识
TCP / IP通常被认为是一个四层协议系统: 1) 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.它们一起处理与电缆(或其他任何传输媒介)的物 ...
- reset.css css重置公共样式
@charset "utf-8";/*Css Document*/ /*! * @名称:reset.css * @功能:1.重设浏览器默认样式 * 2.设置通用原子类 *//* 防 ...
- CSS知识回顾--读《CSS 那些事儿》笔记
由于之前有了解过CSS的相关知识,有了一定的基础,所以读起<CSS 那些事儿>不是很有难度,况且我现在读起来时,CSS3和HTML5比较流行,这里只是记录一些CSS知识记录,不做详细铺开, ...
- 设置arc 的默认编辑器
arc set-config editor "vim" 转自:http://udn.yyuap.com/thread-39791-1-1.html Pharicator是FB的代码 ...
- read name 和 read 在 Bash 中的区别
read 带一个参数和不带参数的区别是什么,我本以为仅仅是被赋值的变量的名字不同而已: $ read name 1 $ echo "$name" 1 $ read 1 $ echo ...
- Android中如何控制元素的显示隐藏?
在Android程序中,有时需要程序开启时默认隐藏某个控件,当单击某个按钮时才触发显示控件的内容.比如在查询员工资料时,提交查询后再显示查询到的表格内容: Android中控制元素的隐藏参考以下代码. ...