当前位置: 首页 > news >正文

javascript中的this

关于js中的this,记住这句话:那个对象实例调用this所在的函数,那么this就代表哪个对象实例。
function test() { 
	alert(this.x); 
} 
var o = {}; 
o.x = 1; 
o.m = test; 
o.m(); //1 


console.group("xxxx");
function test() { 
	this.x = 1; 
} 
var o = new test(); 
//alert(o.x);//1 
console.log(o.x);
console.groupEnd("xxxx");


function test3(){
  this.x = 3;
}
test3();
alert(x);//这个函数中,this指的window,可以这样理解,test3() 即 window.test3();
		//所以test3()中的this就指的window,所以x是一个全局变量。


var o = {prop:37};
function my(){
  return this.prop;
  //alert(this.prop);
}
o.f = my;
console.log(o.f());//37,注意o.f()和o.f的差别。暂时还没完全理解这二者的具体差异。
console.log(o.f);  //my()


function c(){
  this.a = 37;
  return {a:40};//我的理解是:相当于重新给a进行赋值,值被修改为40了。
}
o = new c();
console.log(o.a);


function c(){
  this.a = 37;
  this.a = 90;
}
o = new c();
console.log(o.a);

  还有一篇关于this的链接:http://segmentfault.com/a/1190000000638443,这个写得比较好,具体内容如下:

前段时间回答的一个关于this的问题,便总结记录下。
在javascript的函数中,除了声明时定义的形参之外,每个函数还可以接收两个附加的参数:this和arguments。这里就讲一下this的作用以及不同场景下它的不同指向。this的取值(即它的指向取决于调用的模式),在javascript中明确this指向大致有四种情况:

1.函数调用模式的时候,this指向window

function aa(){
  console.log(this)
}
aa()                 //window
2.方法调用模式的时候,this指向方法所在的对象

var a={};
a.name = 'hello';
a.getName = function(){
  console.log(this.name)
}
a.getName()         //'hello'
3.构造函数模式的时候,this指向新生成的实例

function Aaa(name){
  this.name= name;
  this.getName=function(){
    console.log(this.name)
  }
}
var a = new Aaa('kitty');
a.getName()        //  'kitty'
var b = new Aaa('bobo');
b.getName()        //  'bobo'
4.apply/call调用模式的时候,this指向apply/call方法中的第一个参数

var list1 = {name:'andy'}
var list2 = {name:'peter'}

function d(){
  console.log(this.name)
}
d.call(list1)     //  'andy' 
d.call(list2)     //  'peter' 

  

相关文章:

  • Github Pages 静态网页建站
  • 2301: [HAOI2011]Problem b
  • poj 1251 统计难题(字典树)
  • uploadify.js参数说明(转)
  • MongoDB高可用架构:Replica Sets+Sharding
  • 实验二 Java面向对象程序设计
  • Linq之求和,平均值,最大值,最小值
  • Android 中文API (70) —— BluetoothDevice[蓝牙]
  • 动态数组排序实例
  • Nginx 反向代理、负载均衡与动静分离
  • [裴礼文数学分析中的典型问题与方法习题参考解答]4.4.9
  • 贪心 URAL 1303 Minimal Coverage
  • 使用JS或jQuery模拟鼠标点击a标签事件代码
  • 创建activiti工作流所需23张表
  • Spring Userservice-用户登录,登录数据库密码存储以及防止暴力破解
  • javascript数组去重/查找/插入/删除
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • PermissionScope Swift4 兼容问题
  • PHP的类修饰符与访问修饰符
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • TypeScript迭代器
  • vue自定义指令实现v-tap插件
  • XForms - 更强大的Form
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 高程读书笔记 第六章 面向对象程序设计
  • 前端自动化解决方案
  • 十年未变!安全,谁之责?(下)
  • 使用Gradle第一次构建Java程序
  • 使用Swoole加速Laravel(正式环境中)
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 译米田引理
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #在 README.md 中生成项目目录结构
  • $.ajax,axios,fetch三种ajax请求的区别
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (二开)Flink 修改源码拓展 SQL 语法
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • ***监测系统的构建(chkrootkit )
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET 材料检测系统崩溃分析
  • .net 简单实现MD5
  • .NET处理HTTP请求
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET学习全景图
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [android] 看博客学习hashCode()和equals()
  • [Android]一个简单使用Handler做Timer的例子
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [C++]运行时,如何确保一个对象是只读的
  • [CISCN 2019华东南]Web11
  • [codevs] 1029 遍历问题
  • [COI2007] Sabor
  • [ffmpeg] x264 配置参数解析