国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

深入理解javascript原型和閉包(1)——一切都是對象

2024-04-27 15:14:18
字體:
來源:轉載
供稿:網友

原文地址:http://www.cnblogs.com/wangfupeng1988/p/3977987.html

“一切都是對象”這句話的重點在于如何去理解“對象”這個概念。

——當然,也不是所有的都是對象,值類型就不是對象。

 

首先咱們還是先看看javascript中一個常用的函數——typeof()。typeof應該算是咱們的老朋友,還有誰沒用過它?

typeof函數輸出的一共有幾種類型,在此列出:

復制代碼
       function show(x) {            console.log(typeof(x));    // undefined            console.log(typeof(10));   // number            console.log(typeof('abc')); // string            console.log(typeof(true));  // boolean            console.log(typeof(function () { }));  //function            console.log(typeof([1, 'a', true]));  //object            console.log(typeof ({ a: 10, b: 20 }));  //object            console.log(typeof (null));  //object            console.log(typeof (new Number(10)));  //object        }        show();復制代碼

以上代碼列出了typeof輸出的集中類型標識,其中上面的四種(undefined, number, string, boolean)屬于簡單的值類型,不是對象。剩下的幾種情況——函數、數組、對象、null、new Number(10)都是對象。他們都是引用類型。

判斷一個變量是不是對象非常簡單。值類型的類型判斷用typeof,引用類型的類型判斷用instanceof。

var fn = function () { };console.log(fn instanceof Object);  // true

 

好了,上面說了半天對象,各位可能也經常在工作中應對對象,在生活中還得應對活生生的對象。有些個心理不正常或者愛開玩笑的單身人士,還對于系統提示的“找不到對象”耿耿于懷。那么在Javascript中的對象,到底該如何定義呢?

對象——若干屬性的集合。

java或者C#中的對象都是new一個class出來的,而且里面有字段、屬性、方法,規定的非常嚴格。但是javascript就比較隨意了——數組是對象,函數是對象,對象還是對象。對象里面的一切都是屬性,只有屬性,沒有方法。那么這樣方法如何表示呢?——方法也是一種屬性。因為它的屬性表示為鍵值對的形式。

而且,更加好玩的事,javascript中的對象可以任意的擴展屬性,沒有class的約束。這個大家應該都知道,就不再強調了。

先說個最常見的例子:

以上代碼中,obj是一個自定義的對象,其中a、b、c就是它的屬性,而且在c的屬性值還是一個對象,它又有name、year兩個屬性。

 

這個可能比較好理解,那么函數和數組也可以這樣定義屬性嗎?——當然不行,但是它可以用另一種形式,總之函數/數組之流,只要是對象,它就是屬性的集合。

以函數為例子:

復制代碼
        var fn = function () {            alert(100);        };        fn.a = 10;        fn.b = function () {            alert(123);        };        fn.c = {            name: "王福朋",            year: 1988        };復制代碼

上段代碼中,函數就作為對象被賦值了a、b、c三個屬性——很明顯,這就是屬性的集合嗎。

你問:這個有用嗎?

回答:可以看看jQuery源碼

在jQuery源碼中,“jQuery”或者“$”,這個變量其實是一個函數,不信你可以叫咱們的老朋友typeof驗證一下。

console.log(typeof ($));  // functionconsole.log($.trim(" ABC "));

驗明正身!的確是個函數。那么咱們常用的 $.trim() 也是個函數,經常用,就不用驗了吧!

很明顯,這就是在$或者jQuery函數上加了一個trim屬性,屬性值是函數,作用是截取前后空格。

 

javascript與java/C#相比,首先最需要解釋的就是弱類型,因為弱類型是最基本的用法,而且最常用,就不打算做一節來講。

其次要解釋的就是本文的內容——一切(引用類型)都是對象,對象是屬性的集合。最需要了解的就是對象的概念,和java/C#完全不一樣。所以,切記切記!

 

最后,有個疑問。在typeof的輸出類型中,function和object都是對象,為何卻要輸出兩種答案呢?都叫做object不行嗎?——當然不行。

具體原因,且聽下回分解!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长治市| 霞浦县| 阳山县| 阜南县| 望奎县| 曲麻莱县| 平凉市| 海阳市| 龙州县| 集贤县| 桦川县| 喀喇沁旗| 晋州市| 潼关县| 靖远县| 乌苏市| 新巴尔虎左旗| 道孚县| 无为县| 田东县| 北安市| 临高县| 五台县| 邵阳县| 甘肃省| 佳木斯市| 建瓯市| 岳西县| 晴隆县| 双桥区| 年辖:市辖区| 大同市| 萨迦县| 定安县| 鄄城县| 万全县| 盖州市| 阜宁县| 张家川| 师宗县| 鹰潭市|