在JavaScript中,this关键字指什么?
指向对象、window、方法。
例子1
function a(){//当前调用栈是a,因此a的调用位置是全局作用域 console.log('a'); b();// b的调用位置 } function b(){//当前调用栈是a->b,因此a的调用位置是a console.log('b'); c();// c的调用位置 } function c(){//当前调用栈是a->b->c,因此a的调用位置是b console.log('c'); } a(); // a的调用位置 debugger;调试工具中分析call stack
例子2
function foo(){ console.log(this.a); } var a = 2; foo(); function foo(){ 'use strict' console.log(this.a); } var a = 2; foo();
例子3
function test(){ console.log(this.a); } var obj = { a: 2, test :test } obj.test();
例子4
function foo(){ console.log(this.a); } var obj ={ a:2, foo:foo } var bar = obj.foo; var a = 3; bar();
例子5
var x = 2; function test() { this.x = 1; } var b = new test(); alert("b.x: " + b.x); b.x = 3; test(); x*=10; alert("b.x: " + b.x); alert("x: " + x); var b = {}; b.x = 4; b.test = test; b.test(); alert("b.x: " + b.x); var b = {}; b.x = 4; b.test = test; x += 5; b.test.apply(); alert("b.x: " + b.x); alert("x: " + x); var b = {}; b.x = 4; b.test = test; x += 5; b.test.apply(b) alert("b.x: " + b.x); alert("x: " + x);
例子6
var name = "I am window"; var obj = { name:"xiaoming", job:"software", ftn01:function(obj){ obj.show(); }, ftn02:function(ftn){ ftn(); }, ftn03:function(ftn){ ftn.call(this); } }; function Person(name){ this.name = name; this.show = function(){ console.log("姓名:" + this.name); console.log(this); } } var p = new Person("Person"); obj.ftn01(p); obj.ftn02(function(){ console.log(this.name); console.log(this); }); obj.ftn03(function(){ console.log(this.name); console.log(this); });
this的调用方式
作为函数的调用 getThis();
作为对象方法的调用 b.getThis = getThis; b.getThis();
作为构造函数的调用 var b = new getThis();
call()、apply()调用 b.getThis.apply();
情形一:传入的参数是函数的别名,那么函数的this就是指向window;
情形二:传入的参数是被new过的构造函数,那么this就是指向实例化的对象本身;
情形三:如果我们想把被传入的函数对象里this的指针指向外部字面量定义的对象,那么我们就是用apply和call
如果在javascript语言里没有通过new(包括对象字面量定义)、call和apply改变函数的this指针,函数的this指针都是指向window的
function A(){ function initName(){ this.name = '123'; } initName(); } var a = new A(); console.log(a.name);
这个例子中控制台打印的信息是undefined(想想为什么),怎样使a.name的值为‘123’呢?上面的this指向window,
在function中,使用this,如果没有new,那么this指向window。
方法1
function A(){ var _this = this; function initName(){ _this.name = '123'; } initName(); } var a = new A(); console.log(a.name);
方法2
function A(){ function initName(){ this.name = '123'; } initName.call(this); } var a = new A(); console.log(a.name);
方法3
function A(){ (function initName(that){ that.name = '123'; })(this); } var a = new A(); console.log(a.name);
方法4
function A(){} A.prototype.initName = function(){ this.name = '123'; } var a = new A(); a.initName(); console.log(a.name);
方法5
function A(){ var name; this.initName = function(){ name = '123'; } this.getName = function(){ return name; }; this.initName(); } var a = new A(); console.log(a.getName()); function B(){ A.call(this); b.getName(); } var b = new B(); console.log(b.getName());
方法6
function A(){ function initName(){ this.name = '123'; } return new initName(); } var a =A(); console.log(a.name);
场景二、
function A(){ this.name='a'; } A.prototype.name='b'; var a=new A(); //a.name='c'; console.log(a.name); delete(a.name); console.log(a.name);
js寻找对象的方式,先在自身找,找不到才会去原型链上找。
在JavaScript中,this关键字指什么?的更多相关文章
- 深入解析Javascript中this关键字的使用
深入解析Javascript中面向对象编程中的this关键字 在Javascript中this关键字代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如: function TestFun ...
- JavaScript中this关键字的使用比较
JavaScript中this关键字的使用比较 this关键字在JavaScript中,用的不能说比较多,而是非常多.那么熟悉this关键字的各种用法则显得非常关键. this有时候就是我们经常说的上 ...
- 大前端学习笔记整理【五】关于JavaScript中的关键字——this
写在前面 工作有那么一段时间了,但是在工作中,发现自己的理论知识还是有所欠缺.特别是在javascript上,很多东西其实自己属于知道要用这个,但是不知道为什么要这么用...这种情况很是尴尬了,所以写 ...
- javascript中new关键字详解
和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象. 但在 javascript 中,万物皆对象,为什么还要通过 ...
- [No000069]Javascript中this关键字详解
Quiz 请看下面的代码,最后alert出来的是什么呢?(chrome下按F12,选择Console直接复制粘贴运行) var name = "Bob"; var nameObj ...
- javascript中this关键字详解
不管学习什么知识,习惯于把自己所学习的知识列成一个list,会有助于我们理清思路,是一个很好的学习方法.强烈推荐. 以下篇幅有点长,希望读者耐心阅读. 以下内容会分为如下部分: 1.涵义 1.1:th ...
- JavaScript中var关键字的使用详解
作用 声明作用:如声明个变量. 语法 ? 1 var c = 1; 省略var 在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. ? ...
- javascript中的关键字和保留字
javascript中关键字的问题,将名称替换了下,确实就没有问题了.现在将它的关键字和保留字贴出来,便于日后查看和避免在次出现类似的问题. 1 关键字breakcasecatchcontinuede ...
- 深入了解JavaScript中的关键字
this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,下面分四种情况,详细讨论this的用法,感兴趣的朋友可以了解下. this是Javascri ...
- 对于JavaScript中this关键字的理解
这是我第二遍学this了,第一遍学的懵懵的.this指哪里都是凭我一个男人的直觉然后控制台输出看看对不对. 刚查了书.博客.视频.理解差不多了.毕竟菜鸡me: 一.首先介绍下什么是this this是 ...
随机推荐
- bootstrap tab切换如何让鼠标移动自动切换内容
bootstrap集成了很多功能,比如nav-tabs组件,可以将相似的内容集中在一个区块中展示.bootstrap tab切换默认是要点击才会切换的,如何实现鼠标移动就自动切换呢?如下图所示,光标移 ...
- LR 测试数据库总结
今天工作中需要对mysql进行性能测试 我尝试用LR来做:但是mysql需要现在电脑上安装一个OBDC的mysql驱动器,然后在电脑的管理工具中的数据源中加入这个mysql驱动,测试连接数据库成功,O ...
- reverse array java
/* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import ...
- 在link的url里新增参数
(文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) <%= link_to image_tag("/images/icons/aaa. ...
- linux使用技巧
<1>vim /etc/hosts.deny sshd : 192.168.0.25 :deny //ssh拒绝某ip或网段访问.(原理详见鸟哥基础版18章P56 ...
- jekyll中文乱码问题
一般编写都是采用utf-8的吧,但是在windows下安装的jekyll,默认是以GBK编码的方式去读取咱们编写的文件,如此便乱码了. 要解决此问题,总不至于要写GBK编码的文件吧,毕竟这个编码不怎么 ...
- 【OpenStack】OpenStack系列4之Glance详解
下载安装 参考:http://www.linuxidc.com/Linux/2012-08/68964.htm http://www.it165.net/os/html/201402/7246.htm ...
- 【Spring】Spring系列4之Spring支持JDBC
4.Spring支持JDBC 4.1.使用JdbcTemplate简化JDBC开发 也可以这么用(不推荐): 4.2.使用NamedParameterJdbcTemplate
- jlink安装
https://www.segger.com/jlink-software.html?step=1&file=JLink_510p
- dbVisualizer连接mysql