在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是 ...
随机推荐
- 百度站长工具进击site结果页面[SITE特型]
最近在度娘上site站点是不是发现多了一个应用展示框?没错!这就是度娘新推出的site特型,仔细看一下是百度站长平台的相关功能,作为目前国内市场占有率比较高的搜索引擎,百度站长工具进击site结果页面 ...
- 淘宝(阿里百川)手机客户端开发日记第八篇 Handler的使用方法
首先,我们先看下API文档的说明: A Handler allows you to send and process Message and Runnable objects associated w ...
- [Effective JavaScript 笔记]第6章:库和API设计--个人总结
前言 又到了一章的总结,这章里的内容.是把我从一个代码的使用者,如何换位成一个代码的编写者.如何让别人用自己的代码更容易,不用去注意太多的无用细节,不用记住冗长的函数名.在使用API时怎样避免使用者会 ...
- [ruby on rails] 跟我学之(4)路由映射
前面<[ruby on rails] 跟我学之Hello World>提到,路由对应的文件是 config/routes.rb 实际上我们只是添加了一句代码: resources :pos ...
- python __init__ __call__
__call__ 和 __init__半毛钱的关系都没有. 后者是构造类的实例时会调用的方法,并不是构造方法. 前者是在实例上可以呼叫的方法.代码示例如下: >>> class fo ...
- apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))
apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104)) 今天用apache 自带的ab工具测试,当并发量达到1000多的时 ...
- Easy Multiple Copy to Clipboard by ZeroClipboard
要实现在多个复制按钮复制的功能(具体代码在附件中,路径修改一下就行了): <%@ page language="java" import="java.util.*& ...
- What is the difference between provider network and self-service network in OpenStack?
"self-service networking" allows users to create their own virtual networks, subnets, rout ...
- 【OpenStack】OpenStack系列4之Glance详解
下载安装 参考:http://www.linuxidc.com/Linux/2012-08/68964.htm http://www.it165.net/os/html/201402/7246.htm ...
- 【转】自动实时监控Windows2003服务器终端登录并发邮件和发短信通知
记得以前管理的一批windows服务器,一些开源程序做的web站点总会遭到入侵.然而就想找找看有没有办法可以知道服务器有没有被入侵.服务器在什么时候登陆过,如果登陆马上发邮件通知,感觉这种问题肯定有人 ...