this的用法

一.

(1)javascript的宿主环境是web浏览器,浏览器环境需要提供一些接口
javascript引擎才是真正执行代码的地方,e.g V8,Javascript core
(2)Javascript的宿主环境是nodejs,对应引擎是V8

二.global this

this == window对象
(1)声明变量没有var/let -> 给全局的this添加或改改变属性值
(2)node环境中 REPL:交互的编程环境

  1. 执行js脚本,全局范围内this以一个空对象开始作为最高级的命名空间,this不等同于global
  2. 执行js脚本,用REPL执行一个脚本,用var声明一个变量不会将变量添加给this
    执行js脚本,不用REPL执行一个脚本,用var声明一个变量会将变量添加给this
    (和浏览器中一样)
  3. 声明变量无var和let
    ||global对象|this|
    |-|–|--|
    |用REPL执行|有|无|
    |直接执行|有|有|

浏览器 this == window,this最大
node
执行写好的:声明的变量不会自动添加到this,会自动添加global
一行行执行:global最大,global=this,声明的变量自动添加到this和global

三.function this
  1. 指代全局范围内this
  2. 严格 --> this变成undefined
  3. 调用函数前有new,this变成一个新值,this不等于global
  4. 绑定事件处理程序,this指代事件处理程序对应的对象 e.g button
四.prototype this

prototype:每一个函数都是函数对象,会自动获得一个特殊属性prototype;用new方法调用函数,可以用this访问给prototype赋的值
1.

Thing.prototype.foo = "bar"
var thing = new Thing
console.log(thing.foo) //"bar"
  1. 实例中this是一个特殊对象,new之后会隐藏同名属性
  2. 从一个function中new的实例,会共享所有的prototype赋值
  3. 可形成原型链,this会一层一层寻值
    Thing1.prototype.foo = “bar”
    Thing2.prototype = new Thing1
    原型链中重新赋值,就会隐藏本身的值
  4. 嵌套函数 中的this没有继承 --> undefined
    把一个实例的方法当成一个值,把值当成函数参数传给另一个函数,但不把实例传给这个函数
    –> 环境变为全局global
  5. 把this捕捉到变量里 self (改变undefined)
Thing.prototype.logFoo = function(){
	var self = this
	//可调用self.foo
}
  1. 把一个方法作为一个值传递给一个函数无效
function doItIndirectly(method) {
	method()
}
doItIndirectly(thing.logFoo) //logs undefined
  1. 使用bind解决
doItIndirectly(thing.logFoo.bind(thing)) //logs bar
  1. 使用apply和call解决
Thing.prototype.logFoo = function () {
	doIt.apply(this)
}
  1. 用Object.create(Thing.prototype)替换new
五.object this
  1. 用apply将function绑定到var obj上
  2. 只有有相同直接父元素的属性才能通过this共享变量,即元素嵌套不可以
  3. 嵌套后可以直接用obj.foo调用
六.DOM event this

HTML DOM事件处理程序里,this始终指向DOM节点

七.HTML this
八.重写this

不可override

九.with this

with 将this添加到当前环境
Thing.prototype.logFoo = function () {
with(this) {
}
}

十.jQuery this

this指向HTML元素节点
e.g $( ).each

十一.thisArg this
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值