上文(理解javascript原型和作用域系列(1)——一切都是對(duì)象)已經(jīng)提到,,函數(shù)就是對(duì)象的一種,因?yàn)橥ㄟ^instanceof函數(shù)可以判斷,。 var fn = function () { }; console.log(fn instanceof Object); // true 對(duì),!函數(shù)是一種對(duì)象,但是函數(shù)卻不像數(shù)組一樣——你可以說數(shù)組是對(duì)象的一種,,因?yàn)閿?shù)組就像是對(duì)象的一個(gè)子集一樣,。但是函數(shù)與對(duì)象之間,卻不僅僅是一種包含和被包含的關(guān)系,,函數(shù)和對(duì)象之間的關(guān)系比較復(fù)雜,,甚至有一點(diǎn)雞生蛋蛋生雞的邏輯,咱們這一節(jié)就縷一縷,。
還是先看一個(gè)小例子吧,。 function Fn() { this.name = '王福朋'; this.year = 1988; } var fn1 = new Fn(); 上面的這個(gè)例子很簡(jiǎn)單,,它能說明:對(duì)象可以通過函數(shù)來創(chuàng)建。對(duì),!也只能說明這一點(diǎn),。 但是我要說——對(duì)象都是通過函數(shù)創(chuàng)建的——有些人可能反駁:不對(duì)!因?yàn)椋?/p> var obj = { a: 10, b: 20 }; var arr = [5, 'x', true]; 但是不好意思,,這個(gè)——真的——是一種——“快捷方式”,,在編程語言中,一般叫做“語法糖”,。 做“語法糖”做的最好的可謂是微軟大哥,,它把他們家C#那小子弄的不男不女從的,本想圖個(gè)人見人愛,,誰承想還得到處跟人解釋——其實(shí)它是個(gè)男孩,! 話歸正傳——其實(shí)以上代碼的本質(zhì)是: //var obj = { a: 10, b: 20 }; //var arr = [5, 'x', true]; var obj = new Object(); obj.a = 10; obj.b = 20; var arr = new Array(); arr[0] = 5; arr[1] = 'x'; arr[2] = true; 而其中的 Object 和 Array 都是函數(shù): console.log(typeof (Object)); // function console.log(typeof (Array)); // function 所以,可以很負(fù)責(zé)任的說——對(duì)象都是通過函數(shù)來創(chuàng)建的,。
現(xiàn)在是不是糊涂了—— 對(duì)象是函數(shù)創(chuàng)建的,,而函數(shù)卻又是一種對(duì)象——天哪!函數(shù)和對(duì)象到底是什么關(guān)系??? 別著急!揭開這個(gè)謎底,,還得先去了解一下另一位老朋友——prototype原型,。
本系列文章不打算動(dòng)輒幾千字的長(zhǎng)篇大論,咱們小步快跑,,不至于看的太乏味,。
--------------------------------------------------------------------------- 本文已更新到《深入理解javascript原型和閉包》的目錄,更多內(nèi)容可參見《深入理解javascript原型和閉包》,。 另外,,歡迎關(guān)注我的微博。 也歡迎關(guān)注我的其他教程: 《用grunt搭建自動(dòng)化的web前端開發(fā)環(huán)境》《從設(shè)計(jì)到模式》《json2.js源碼解讀視頻》《微軟petshop4.0源碼解讀視頻》 -------------------------------------------------------------------------- |
|