关于function和Object的认识
今天看了阮一峰老師的文章后,發(fā)現(xiàn)自己理解的function差不少。同時(shí)對(duì)this也有了一定認(rèn)識(shí)。
首先,直接使用function定義的時(shí)候,
var aaaa=function(){this.temp=100 } console.log(aaaa.temp,temp,window.temp)這幾種都是undefined,typeof(aaaa)是function,此時(shí)的temp屬性只能在function內(nèi)部訪問(wèn),外面是訪問(wèn)不了的。
而使用 new function()
var foo02 = new function() { var temp = 100; this.temp = 200; return temp + this.temp; }這種方式定義出來(lái)的foo02是對(duì)象,typeof(foo02)是Object,foo02()也會(huì)報(bào)錯(cuò),此時(shí)temp就可以訪問(wèn)了,foo02.temp=200,如果想調(diào)用,則使用foo02.constructor();
還有兩種方法使用new Function()和直接用Function,結(jié)果是一樣的,使用起來(lái)和第一種一樣。
?
關(guān)于this的地方,使用with,注意with是不改變作用域的,如果with的對(duì)象沒(méi)有的屬性,在with里面使用則會(huì)添加到全局作用域中。總之使用with不是特別好,并且對(duì)編譯器的優(yōu)化沒(méi)有好處。
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此時(shí),this指向test1,但是test2()執(zhí)行的環(huán)境是在func中,作用域是func,這里沒(méi)有定義this.a,所以就向上尋找作用域,到了頂層。而func中定義的a=123沒(méi)有var聲明,所以是全局變量,所以test2中的this.a是全局變量中的a也就是123;再來(lái)一種情況:
var a=321; var test1={a:1,func:function(){var a=123;console.log(this.a)function test2(){console.log(this.a)}test2()} }此時(shí)test2()輸出的就是321
?
參考文獻(xiàn)
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的认识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hdu5343 后缀自动机+dp
- 下一篇: hdu 1286 找新朋友 欧拉函数模