this的绑定方式

默认绑定

函数调用时绑定window,在严格模式下不会绑定到全局对象

function foo(){
  console.log(this.a);
}
var a = 10;
foo();

function foo2(){
  "use strict"
  console.log(this.a);
}
foo2();

隐式绑定

将this绑定到上下文对象中

function foo() {
console.log( this.a );
}
var obj = {
a: 2,
foo: foo
};
obj.foo(); // 2
function foo() {
console.log( this.a );
}
var obj2 = {
a: 42,
foo: foo
};
var obj1 = {
a: 2,
obj2: obj2
};
obj1.obj2.foo(); // 42

隐式丢失

函数丢失绑定导致默认绑定,此时this绑定到全局对象,undefined上(严格模式下)

function foo() {
console.log( this.a );
}
var obj = {
a: 2,
foo: foo
};
var bar = obj.foo; // 函数别名!
var a = "oops, global"; // a 是全局对象的属性
bar(); // "oops, global"

显示绑定

使用call和apply进行显示绑定

变式 硬绑定

function foo() {
console.log( this.a );
}
var obj = {
a:2
};
var bar = function() {
foo.call( obj );
};
bar(); // 2
setTimeout( bar, 100 ); // 2
// 硬绑定的bar 不可能再修改它的this
bar.call( window ); // 2

api调用上下文

function foo(el) {
console.log( el, this.id );
}
var obj = {
id: "awesome"
};
// 调用foo(..) 时把this 绑定到obj
[1, 2, 3].forEach( foo, obj );
// 1 awesome 2 awesome 3 awesome

new 绑定

1. 创建(或者说构造)一个全新的对象。
2. 这个新对象会被执行[[ 原型]] 连接。
3. 这个新对象会绑定到函数调用的this。
4. 如果函数没有返回其他对象,那么new 表达式中的函数调用会自动返回这个新对象。

来自<你不知道的javaScript>

时间: 2025-01-01 21:04:19

this的绑定方式的相关文章

spring mvc 的各种参数的绑定方式

本文转自http://www.cnblogs.com/HD/p/4107674.html SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post"> <input n

[Spring MVC] - SpringMVC的各种参数绑定方式

SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post"> <input name="count" value="10" ty

Spring MVC (二 ) ---- 各种参数绑定方式

转载自:http://www.cnblogs.com/HD/p/4107674.html SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post"> <input n

atitit.guice3&#160;绑定方式打总结生成非单例对象toInstance&#160;toProvider区别&#160;v2&#160;pb29

atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29 1. 三 绑定方式的介绍1 2. To接口,链式绑定,用的最多的1 3. toConstructor1 4. toInstance生成的都是单例对象的...3 5. toProvider生成非单例对象3 5.2. 注解(Annotations)绑定3 5.3. 实例绑定(str,int绑定)4 5.4. 无目标绑定4 6. 参考5 重大的描述 1. 三 绑定方式的介绍 1. 在

移动端和pc端事件绑定方式以及取消浏览器默认样式和取消冒泡

### 两种绑定方式 (DOM0)1.obj.onclick = fn; (DOM2)2. ie:obj.attachEvent(事件名称,事件函数); 1.没有捕获(非标准的ie 标准的ie底下有 ie6到10) 2.事件名称有on 3.事件函数执行的顺序:标准ie->正序 非标准ie->倒序 4.this指向window 标准:obj.addEventListener(事件名称,事件函数,是否捕获); 1.有捕获 2.事件名称没有on 3.事件执行的顺序是正序 4.this触发该事件的对象

v-bind绑定属性样式——class的三种绑定方式

1.布尔值的绑定方式 <div id="demo"> <span v-bind:class="{'class-a':isA ,'class-b':isB}"></span> </div> var vm = new Vue({ el:"#demo", data:{ isA: true, isB: true } }) 2.变量的绑定方式 <div id="demo"> &

23SpringMvc_各种参数绑定方式-就是&lt;input那种

本篇博文转载自http://www.cnblogs.com/HD/p/4107674.html: SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post"> <inp

Google Guice之绑定方式

在Guice中,注入器的工作是装配对象图,当请求某一类型实例时,注入器根据对象图来判断如何创建实例.解析依赖.要确定如何解析依赖就需要通过配置注入器的绑定方式. 要创建绑定(Binding)对象,可以继承自AbstractModule类,然后覆盖其configure方法,在方法调用bind()方法来指来定每一次绑定,这些方法带有类型检查,如果你使用了错误的类型编译器就会报告编译错误.如果你已经写好了Module类,则创建一个Module类对象作为参数传递给Guice.createInjector

DevExpress GridControl List绑定方式下新增行的方法

List<Person> gridDataList = new List<Person>(); //此处是数据源 List集合 BindingList<Person> list = new BindingList<Person>(gridDataList); // 将List转换为BindList gridControl.DataSource = list ; // 将BindList 绑定到GridView //新建一行gridView1.AddNewRo

【分享】html5 开发工具——WeX5中的各种绑定方式

今天我想整理一下html5 开发工具——WeX5中的各种绑定方式,下面分为表现类.流程类.交互类 3 种类型分别介绍. 表现类绑定 表现类的绑定属性有visible.text.html.css.style.attr几种,除了css表示css的class之外,其他都是字面意思.示范用法: 布局中加入一个div标签和一个按钮,并设置div标签的绑定属性如下右所示. 这样设定好了绑定关系,然后在 js 中将各绑定属性设置为可观察对象,让其可以自动更新界面: define(function(requir