JavaScript笔记——this的取值
有关ECMAScript定义如何获取this请移步ECMAScript中关于如何获取this的定义
绝大多数情况下,函数的调用方式决定了this的取值
全局上下文
console.log(this === window); //true
函数上下文
直接调用
function fn(){
return this;
}
fn() === window; //true
//this的值不是由函数调用设定,默认为全局对象
严格模式下增强了安全措施,this关键字禁止指向全局对象
function fn(){
"use strict";
return this;
}
fn() === undefined; //true
function f(){
"use strict";
this.a = 1;
}
f();// 报错,this未定义
var fun = new f();
console.log(fun.a); //1
对象方法中的this
指向调用该函数的对象,并且是最靠近的引用
var o = {prop: 37};
function independent() {
return this.prop;
}
o.f = independent;
o.b = {
g: independent,
prop: 42
};
console.log(o.f()); //logs 37
console.log(o.b.g()); //logs 42
构造函数中的this
与即将被创建的新对象绑定,可手动设置返回对象
function C(){
this.a = 37;
}
var o = new C();
console.log(o.a); //logs 37
function C2(){
this.a = 37;
return {a:38};
}
o = new C2();
console.log(o.a); //logs 38
call和apply
this的值被绑定到一个指定的对象上
如果传递的this值不是一个对象,则会使用ToObject操作将其转换为对象
function bar() {
console.log(Object.prototype.toString.call(this));
}
bar.call(7); // [object Number]
//会通过new Number(7)转换为对象
//如果是字符串则会通过new String('foo')转换为对象
bind
Function.prototype.bind
会创建一个具有相同函数体和作用域的函数,但是新函数的this被永久绑定到bind的第一个参数上,无论这个函数如何被调用
function f(){
return this.a;
}
var g = f.bind({a:"azerty"});
console.log(g()); //azerty
var o = {a:37, f:f, g:g};
console.log(o.f(), o.g()); //37, azerty
DOM事件处理函数中的this
事件处理函数中的this指向触发事件的函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button id="btn">button</button>
<script>
function eventHandler() {
//this指向#btn
console.log(this); //<button id="btn">button</button>
}
var btn = document.querySelector('#btn');
btn.addEventListener('click', eventHandler, false);
</script>
</body>
</html>
内联事件处理函数中的this
指向监听器所在DOM元素
<!--
<button onclick="console.log(this);">
Show this
</button>
-->
<button onclick="alert(this);">
Show this
</button>
<!--window对象,因为没有设置内部函数的this,非严格模式下默认指向全局对象-->
<button onclick="alert((function(){return this})());">
Show inner this
</button>
参考
JavaScript笔记——this的取值的更多相关文章
- 用javascript/jQuery给CKEditor取值/赋值
CKEditor 是著名的 HTML 编辑器,IBM.Oracle.Adobe 等都在用.CKEditor 创建于 2003 年,其前身为 FCKEditor,在 2009 年的时候把“F”去掉了,更 ...
- SpringBoot学习笔记(2)----配置文件取值
今天介绍三种配置文件手动取值的方式: springboot配置文件信息保存在application.properties中,默认可以spring.开头的进行spring进行一些常用参数的配置,但是很多 ...
- 转:javascript 中select的取值
javascript获取select的值全解 获取显示的汉字 document.getElementById("bigclass").options[window.document ...
- Javascript 数组之判断取值和数组取值
题目一:var arr = [ '100px', 'abc'-6, [], -98765, 34, -2, 0, '300', , function(){alert(1);}, null, docum ...
- javascript 下拉列表 自动取值 无需value
<select id="applyType" name="$!{status.expression}" class="inp" onc ...
- javascript中json对象与字符串互转及取值
一. json字符串转换为javascript对象,并取值 var answer = '{"id":0}' var value= JSON.parse(answer); //转 ...
- javascript 核心语言笔记- 3 - 类型、值和变量
JavaScript 中的数据类型分为两类:原始类型(primitive type)和对象类型(object type).原始类型包括数字.字符串和布尔值 JavaScript 中有两个特殊的原始值: ...
- JavaScript —— 对象的取值与赋值
可能是因为用惯了 Java ,对一个对象取值/赋值喜欢用 setXXX() 和 getXXX() . 在 JavaScript 中使用 setValue() 时,遇到了个奇怪的问题,所以查了下 Jav ...
- 关于模板中的动态取值 ---反射与javascript脚本编译
在项目中经常遇到一个问题,打印word或者打印excel的时候,我们经常使用一对一的赋值或者批量替换的方式来对模板进行修改. 但是现在遇到两种场景: 1.取值是通过自定以方法进行取值的. 如:一个销售 ...
随机推荐
- wp8 入门到精通 MultiMsgPrompt
List<NotifyMsg> arraymsg = new List<NotifyMsg>(); List<NotifyInfo> ArrayNotifyInfo ...
- 笔记本win7共享WIFI
创建无线网络 (1)netsh wlan set hostednetwork mode=allow ssid=网络名 key=密码 启动承载网络(2)netsh wlan start hostedne ...
- IIS7报错
错误内容:”未能加载文件或程序集“IWMS_Admin”或它的某一个依赖项.试图加载格式不正确的程“ 解决方法:进入IIS“应用程序池”,然后在右边列表中,选中当前网站所使用的程序池,打开右侧的“高级 ...
- 【荐】Spring事务配置的五种方式
Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...
- jackson对多态or多子类序列化的处理配置
[TOC] Jackson Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 多态类型的处理 jackson允许配置多态类型处理, ...
- 接口API测试和返回值JSON解析的插件
火狐插件1. HttpRequest作用:接口API测试例子:http://192.168.10.61:8080/ZHCS/user/loginApp.do?phone=admin&pwd ...
- eclipse 常用快捷键及调试方法
原文链接:http://my.oschina.net/u/1054538/blog/741561 常用快捷键 Eclipse最全快捷键,熟悉快捷键可以帮助开发事半功倍,节省更多的时间来用于做有意义的事 ...
- ASP.NET MVC使用过滤器进行权限控制
1.新建MVC项目 2.找到Models文件夹,新建 LoginCheckFilterAttribute 类 public class LoginCheckFilterAttribute : Acti ...
- [工作中的设计模式]建造者模式builder
一.模式解析 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心. 以上是对建造者模式的官方定义,简单说就是对于复杂对象 ...
- PHP 配置文件详解(php.ini 详解 )
[PHP] ; PHP还是一个不断发展的工具,其功能还在不断地删减 ; 而php.ini的设置更改可以反映出相当的变化, ; 在使用新的PHP版本前,研究一下php.ini会有好处的 ;;;;;;;; ...