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

关于function和Object的认识

时间:2016-05-04 17:17:38      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

今天看了阮一峰老师的文章后,发现自己理解的function差不少。同时对this也有了一定认识。

首先,直接使用function定义的时候,

var aaaa=function(){
    this.temp=100
}
console.log(aaaa.temp,temp,window.temp)

这几种都是undefined,typeof(aaaa)是function,此时的temp属性只能在function内部访问,外面是访问不了的。

而使用 new function()

var foo02 = new function()  
 {  
     var temp = 100;  
     this.temp = 200;  
     return temp + this.temp;  
 }  

这种方式定义出来的foo02是对象,typeof(foo02)是Object,foo02()也会报错,此时temp就可以访问了,foo02.temp=200,如果想调用,则使用foo02.constructor();

还有两种方法使用new Function()和直接用Function,结果是一样的,使用起来和第一种一样。

 

关于this的地方,使用with,注意with是不改变作用域的,如果with的对象没有的属性,在with里面使用则会添加到全局作用域中。总之使用with不是特别好,并且对编译器的优化没有好处。

var test1={
    a:1,
    func:function(){
        a=123;
        console.log(this.a);
        function test2(){
            console.log(this.a);
        }
        test2();
    }
}    

执行test1.func();结果是1  123;原因是func中的this是绑定的test1,test1.func此时,this指向test1,但是test2()执行的环境是在func中,作用域是func,这里没有定义this.a,所以就向上寻找作用域,到了顶层。而func中定义的a=123没有var声明,所以是全局变量,所以test2中的this.a是全局变量中的a也就是123;再来一种情况:

var a=321;
var test1={
    a:1,
    func:function(){
        var a=123;
        console.log(this.a)
        function test2(){
            console.log(this.a)
        }
       test2()
    }
}

此时test2()输出的就是321

 

参考文献

http://javascript.ruanyifeng.com/grammar/object.html

http://www.jb51.net/article/7955.htm

关于function和Object的认识

标签:

原文地址:http://www.cnblogs.com/web-Timer/p/5458878.html

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