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 ...
随机推荐
- Javascript和HTML:
JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...
- Unity Game窗口中还原Scene窗口摄像机操作
最近在弄AI,调试程序的时候总是要调整摄像机的视角.灰常不爽然后自己写了个脚本.比较习惯Scene窗口下的摄像机操作所以就仿造了一个一样的操作脚本. 首相我们要知道Scene下的摄像机的操作方式 1. ...
- oracle---触发器总结
一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需 ...
- 动力节点Java培训告诉你Java线程的多功能用法
现在的java开发可谓是八仙过海各显神通啊!遥想当下各种编程语言萎靡不振,而我Java开发异军突起,以狂风扫落叶之态,作为Java培训行业的黄埔军校,为了守护Java之未来,特意总结了一些不被人所熟知 ...
- Linux下长时间ping网络加时间戳并记录到文本
Linux下长时间ping网络加时间戳并记录到文本 由于一些原因,比如需要检查网络之间是否存在掉包等问题,会长时间去ping一个地址,由于会输出大量的信息而且最好要有时间戳,因此我们可以使用简单的 ...
- Hbase过滤器Filter的使用心得(爬坑经验)
Hbase 的过滤器是个好东西.. 给这种非关系型数据库本来不能复杂查询的情况得到了很好的扩展..提供了很多的帮助.. 但是Filter的种类何其之多..让人眼花缭乱.. 譬如..分页类型的PageF ...
- 【09-23】js原型继承学习笔记
js原型继承学习笔记 function funcA(){ this.a="prototype a"; } var b=new funcA(); b.a="object a ...
- 关于跨域名的信息共享P3P实例
首先我这里用到了redis 和 p3p技术.当然任意的nosql都可以满足 模拟的一个登陆访问的客户端. <?php session_start(); $get = $_GET; ') { $t ...
- service和serviceImpl的选择
同行中,有些同行公司的代码风格是service层=service接口+serviceImpl实现类: 而有的同行公司的代码风格是service层=service类: 为什么不一样呢? 以前没想过这个问 ...
- DbHelper为什么要用Using?
我们分析一下DbHelper做什么事情,大家都知道它用于数据库的连接操作,这里的数据库连接会创建非托管资源,c#的垃圾回收机制不会对它处理,需要实现IDisposable接口手动释放. 手动释放的 ...