关于function和Object的认识
今天看了阮一峰老師的文章后,發(fā)現(xiàn)自己理解的function差不少。同時對this也有了一定認識。
首先,直接使用function定義的時候,
var aaaa=function(){this.temp=100 } console.log(aaaa.temp,temp,window.temp)這幾種都是undefined,typeof(aaaa)是function,此時的temp屬性只能在function內(nèi)部訪問,外面是訪問不了的。
而使用 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,如果想調(diào)用,則使用foo02.constructor();
還有兩種方法使用new Function()和直接用Function,結(jié)果是一樣的,使用起來和第一種一樣。
?
關(guān)于this的地方,使用with,注意with是不改變作用域的,如果with的對象沒有的屬性,在with里面使用則會添加到全局作用域中。總之使用with不是特別好,并且對編譯器的優(yōu)化沒有好處。
var test1={a:1,func:function(){a=123;console.log(this.a);function test2(){console.log(this.a);}test2();} }執(zhí)行test1.func();結(jié)果是1 ?123;原因是func中的this是綁定的test1,test1.func此時,this指向test1,但是test2()執(zhí)行的環(huán)境是在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
轉(zhuǎn)載于:https://www.cnblogs.com/web-Timer/p/5458878.html
總結(jié)
以上是生活随笔為你收集整理的关于function和Object的认识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu5343 后缀自动机+dp
- 下一篇: hdu 1286 找新朋友 欧拉函数模