js中this问题

  1. 默认绑定 // 没人绑定,this => window
  2. 隐式绑定 // 谁调用this指向谁
  3. 显示绑定 // bind call apply
  4. 构造器调用。(构造器里的this指向返回的这个对象)这里可以联系new的原理过程

new过程发生的事情

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

用来指定函数内部的this指向,以下是bind的源码

 Function.prototype.bind = function(){
		var self = this, // 保存原函数
			context = [].shift.call( arguments ), // 需要绑定的this上下文
			args = [].slice.call( arguments ); // 剩余的参数转成数组
			console.log(self)
		return function(){ // 返回一个新的函数
			return self.apply( context, [].concat.call( args, [].slice.call( arguments ) ) );
			// 执行新的函数的时候,会把之前传入的context当作新函数体内的this
			// 并且组合两次分别传入的参数,作为新函数的参数
		}
	};
	var obj = {
		name: 'sven'
	};
	var func = function( a, b, c, d ){
		console.log ( this.name ); // 输出:sven
		console.log ( [ a, b, c, d ] ) // 输出:[ 1, 2, 3, 4 ]
	}.bind( obj, 1, 2 );
	func( 3, 4 );

对this的应用

var a = 123,
		b = 234;
		function text() {
			var a = 111,
				b = 123;
				console.log(this.a)
				console.log(this.b)
		}

		var n = new text() // new操作符相当于函数执行,返回一个对象,this绑定在{}上
		console.log(n.a)
		console.log(n.b)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值