首页 > 编程语言 > 详细

javascript之观码说理

时间:2015-11-30 00:37:28      阅读:143      评论:0      收藏:0      [点我收藏+]

前一阶段看到大神在网上贴出的测试个人js理解的代码。

在此我在此借用大神的代码,进行自我复述,大神文章参见:http://www.imooc.com/article/1731

代码1:

function foo(){
    console.log(this.a);
}
function doFoo(fn){
    fn();
}
function doFoo2(o){
    o.foo();
}
var obj = {
    a: 2,
    foo: foo
};
var a = "I‘m an a";
doFoo(obj.foo);
doFoo2(obj);


 

我的理解:

先说doFoo(obj.foo)

传入的参数obj.foo即对象obj的元素foo,内容为foo。

此时传入的foo在方法doFoo中就变成了调用foo()方法。

因为foo()是定义在最外层的,此时的this指向最外层对象window,所以取得的a应该是在最外层定义的 var a = "I‘m an a";

所以第一个方法返回的是I‘m an a。

 

其次说doFoo2(obj)

传入的参数是obj对象.

此时在doFoo2中调用的是obj.foo()。

这时foo()方法中的this重新指向了obj对象,所以this.a取得的是obj对象中的a。

所以第二个方法返回的是2.

 

大神的分析:

在Javascript中,this指向函数 执行时的当前对象,而非声明环境有
执行doFoo的时候执行环境就是doFoo函数,执行环境为全局。
执行doFoo2时是在对象内部调用函数,this指针指向该对象。

 

代码2:

function foo(somthing){
    console.log(this.a, somthing);
}
function bind(fn, obj){
    return function(){
        return fn.apply(obj, arguments);
    }
}
var obj = {
    a:2
}
var bar = bind(foo, obj);
var b = bar(3);
console.log(b);


未完待续

 

javascript之观码说理

原文:http://www.cnblogs.com/zjtTT/p/4914055.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!