码迷,mamicode.com
首页 > 其他好文 > 详细

this的绑定方式

时间:2017-05-05 21:49:48      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:其他   lob   set   属性   apply   调用   对象   它的   原型   

默认绑定

函数调用时绑定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>

this的绑定方式

标签:其他   lob   set   属性   apply   调用   对象   它的   原型   

原文地址:http://www.cnblogs.com/xujiakang/p/6814921.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!