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 ...
随机推荐
- py-faster-rcnn +cudnn V5
转载自http://blog.csdn.net/u010733679/article/details/52221404,经过实际操作,采用了第二种手动替换代码文件.修改个别函数名的方式,成功编译. - ...
- 彻底删除MySQL
安装mysql数据库.最后一步APPLY SECURITY SETTINGS总是失败.感觉很郁闷.上网找了教程,有前四步,一一做了,发现还是不对.最近突然发现在环境变量那边的路径还没有卸载干净.可能我 ...
- POJ2763 Housewife Wind
Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 9701 Accepted: 2661 Description Aft ...
- (转) java定时器的几种用法
package com.lid; import java.util.Calendar; import java.util.Date; import java.util.Timer; import ja ...
- Size Balance Tree(SBT模板整理)
/* * tree[x].left 表示以 x 为节点的左儿子 * tree[x].right 表示以 x 为节点的右儿子 * tree[x].size 表示以 x 为根的节点的个数(大小) */ s ...
- nltk27_NLTK聚类分析
http://www.pythontip.com/blog/post/10044/ Python自然语言处理(三) -- 利用NLTK进行聚类 这篇文章介绍如何利用NLTK进行聚类,和上两篇文章Pyt ...
- [Unity3d]游戏中子弹碰撞的处理
如果使用Collider+Rigidbody的方式来处理,则它是每一帧进行判定碰撞:如果子弹过快导致碰撞发生在2帧之间,则会导致无法捕获这个碰撞效果 基于上述原因,我们要使用射线Raycast进行子弹 ...
- 2Struts2基础----青软S2SH(笔记)
- [NHibernate]代码生成器的使用
目录 写在前面 文档与系列文章 代码生成器的使用 总结 写在前面 前面的文章介绍了nhibernate的相关知识,都是自己手敲的代码,有时候显得特别的麻烦,比如你必须编写持久化类,映射文件等等,举得例 ...
- tyvj1192 迎春舞会之集体舞
背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 描述 表演者排成n排,构成一个向前的正三角形(在屏幕上,即向下).而就每个人,他有可能正面朝前(小的向前正三角形).或向后三角形(小的向后正 ...