Skip to content

this #6

@yongheng2016

Description

@yongheng2016

this的确定

① 首先找到表达式中哪个表示的是函数

var obj = {
    name: 'yongheng',
    foo: function (){
        console.log(this.name)
    }
}

var fn1 = {name:  'haha'}
fn1.func = obj.foo
fn1.func()   //这里func是函数,所以fn1调用了它,this --> fn1 输出结果:‘haha’

var fn2 = obj.foo
fn2()  //这里fn2本身就是个函数,没人调用它,undefined --> window

obj.foo()  //这里foo是函数,obj调用了它, this --> obj  输出结果: ‘yongheng’

② 变形一下就可以了

上面的三个输出依次可以变形:

fn1.func.call(fn1)
fn2.call(undefined)
obj.foo.call(obj)

通用变形:

func(p1, p2) 等价于
func.call(undefined, p1, p2)

obj.child.method(p1, p2) 等价于
obj.child.method.call(obj.child, p1, p2)

事件中的this
+ 查看方法
   * 看源码
   * 看文档(推荐)
   * console.log(this)
+ 怎么用this
   * 直接使用this
   * currentTarget
   * 用.bind({name: 'abc'}) ->里面必须是对象
$('ul li').on('click',function (){
   console.log(this)    // {'name': 'abc'}
}).bind('name': 'abc'})

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions