Time of Update: 2017-01-18
EMCA262規範中沒有類(class)的概念,js的new只是讓他看起來更像c++,java一點。這裡說的寫類,只是書寫js代碼風格而已。 1、建構函式方式 複製代碼 代碼如下:/** * Person類:定義一個人,有個屬性name,和一個getName方法 * @param {String} name */ function Person(name) { this.name = name; this.getName = function() { return this.name; } }
Time of Update: 2017-01-18
JavaScript就其本質是函數式程式設計語言,是Lisp的後代,同時又加入了一下物件導向編程的元素,放棄了一些難懂的函數式語言的元素。 函數式程式設計語言可以實現物件導向編程,這是毫無疑義的,Curry方法可以實現對類和對象的類比。但是JavaScript提供了另一種實現OOP的方法:原型繼承。 因此,JavaScript實現物件導向編程和一般的函數式程式設計語言還是有所區別的。 本文我將會給大家介紹JavaScript實現單繼承和多繼承的方法。 用原型實現單繼承:
Time of Update: 2017-01-18
結果呢,看了大半天,有了一個大概的瞭解,細細一回味,好像什麼都沒懂... 這篇文章是參考<<javascript-the definitive guide,5th edition>>第7,8,9章而寫成的,我也 會盡量按照原書的結構來說明javascript的物件導向技術(對象/數組->函數-->類/建構函式/原型).對一些我自己也拿捏不準的地方,我會附上原文的英文語句,供大家參考. 如果不做說明,則文中出現的所有英文語句(程式體除外)都是引自<<
Time of Update: 2017-01-18
所有的構造器都是對象,而並非所有的對象都是構造器.每個構造器都有一個用來實現原型繼承、共用屬性的Prototype屬性。對象通過new 運算式建立;比如,new String("A String") 建立了一個String對象。沒有通過new而直接調用構造器將有傳回值,返回的類型將取決於構造器。例如String("A String")產生一個原始的類型的字串而不是一個對象。
Time of Update: 2017-01-18
新一篇: JavaScript中字串相等比較 面象對象的應用是相當廣泛的,在案頭編程中很早就出現了,應用比較成熟,象C++,Java,C#等。而在Web編程這一塊,出現就要晚得多,以致於現在的Web開發很困難,當然也有Web開發牽涉的技術多的原因。近年來,物件導向逐漸在Web開發中被引入。很多大型的網站是採用PHP開發的,PHP 4中物件導向的還不是很完善,在PHP 5中有所改進。.Net也物件導向,但執行效率比不上PHP。
Time of Update: 2017-01-18
OOP 語言使我們有能力自訂對象和變數類型。 物件導向編程 JavaScript 是物件導向的程式設計語言 (OOP)。OOP 語言使我們有能力定義自己的對象和變數類型。對象擁有屬性和方法。 屬性 屬性指與對象有關的值。 舉例: 複製代碼 代碼如下: <script type="text/javascript"> var txt="Hello World!" document.write(txt.length) //使用字串對象的長度屬性來計算字串中的字元數目,輸出為:12 <
Time of Update: 2017-01-18
可以看看這個例子: 複製代碼 代碼如下: var a = 'global'; (function () { alert(a); var a = 'local'; })(); 大家第一眼看到這個例子覺得輸出結果是什嗎?‘global'?還是‘local'?其實都不是,輸出的是undefined,不用迷惑,我的題外話就是為了講這個東西的。 其實很簡單,看一看JavaScript運行機制就會明白。我們可以把這種現象看做“預聲明”。但是如果稍微深究一下,會明白得更透徹。
Time of Update: 2017-01-18
先上一段最簡單的: 複製代碼 代碼如下: // 以下幾行代碼展示了命名空間、類、以及函數的類比定義和使用: NameSpace = {}; NameSpace.Class = function(){ this.Method = function(info){alert(info);} }; new NameSpace.Class().Method("Hello world"); 再來一些可見到的,各種情況的代碼 1.類的類比 複製代碼 代碼如下: // 類定義 function
Time of Update: 2017-01-18
命名空間 JavaScript本身中沒有提供命名空間機制,所以為了避免不同函數、對象以及變數名對全域空間的汙染,通常的做法是為你的應用程式或者庫建立一個唯一的全域對象,然後將所有方法與屬性添加到這個對象上。 複製代碼 代碼如下: /* BEFORE: 5 globals */ // constructors function Parent() {} function Child() {} // a variable var some_var = 1; // some objects var
Time of Update: 2017-01-18
this屬性工作表示當前對象,如果在全域作用範圍內使用this,則指代當前頁面對象window; 如果在函數中使用this,則this指代什麼是根據運行時此函數在什麼對象上被調用。 我們還可以使用apply和call兩個全域方法來改變函數中this的具體指向。 先看一個在全域作用範圍內使用this的例子: 複製代碼 代碼如下: <script type="text/javascript"> console.log(this === window); // true
Time of Update: 2017-01-18
我們已經在第一章中使用prototype屬性類比類和繼承的實現。 prototype屬性本質上還是一個JavaScript對象。 並且每個函數都有一個預設的prototype屬性。 如果這個函數被用在建立自訂對象的情境中,我們稱這個函數為建構函式。 比如下面一個簡單的情境: 複製代碼 代碼如下: // 建構函式 function Person(name) { this.name = name; } // 定義Person的原型,原型中的屬性可以被自訂對象引用 Person.prototype =
Time of Update: 2017-01-18
js對象產生時:如:function BB(a){this.a="kkk"}var b=new BB();這時b是對象有了BB的的屬性prototype所指向的prototype對象;prototype對象有constructor屬性指向BB這個函數;所以alert(b.constructor==BB.prototype.constructor)
Time of Update: 2017-01-18
本文承接上一篇JavaScript物件導向編程(1) 基礎。 上篇說過,JavaScript沒有類的概念,需要通過函數來實作類別的定義。先通過一個例子說明: 複製代碼 代碼如下: function myClass() { var id = 1; var name = "johnson"; //properties this.ID = id; this.Name = name; //method this.showMessage = function() { alert("ID: " +
Time of Update: 2017-01-18
1. 用JavaScript實作類別 JavaScritpt沒有專門的機制實作類別,這裡是藉助它的函數允許嵌套的機制來實作類別的。一個函數可以包含變數,又可以包含其它函數,這樣,變數可以作為屬性,內部的函數就可以作為成員方法了。因此外層函數本身就可以作為一個類了。如下: 複製代碼 代碼如下: function myClass() { //此處相當於建構函式 } 這裡 myClass就是一個類。其實可以把它看成類的建構函式。至於非建構函式的部分,以後會詳細描述。 2. 如何獲得一個類的執行個體
Time of Update: 2017-01-18
一,概述在Java語言中,我們可以定義自己的類,並根據這些類建立對象來使用,在Javascript中,我們也可以定義自己的類,例如定義User類、Hashtable類等等。目前在Javascript中,已經存在一些標準的類,例如Date、Array、RegExp、String、Math、Number等等,這為我們編程提供了許多方便。但對於複雜的用戶端程式而言,這些還遠遠不夠。與Java不同,Java2提供給我們的標準類很多,基本上滿足了我們的編程需求,但是Javascript提供的標準類很少,許
Time of Update: 2017-01-18
模式類型:原廠模式 模式說明:常用模式之一,用來動態建立對象 適用範圍:在運行期間需要在一系列可互換的子類中進行選擇的類 注意事項:介面的實現,從而使不同子類可以被同等的對待,恰當的使用原廠模式,但不要拘泥與形式,理解本質。 關鍵點:以 函數/類/子類 構建的選取器 本質:函數作為選取器的使用 一般使用形式: 作為獨立的選取器存在: 複製代碼 代碼如下: function FactoryMode(index){ switch(index){ case "index1" : return new
Time of Update: 2017-01-18
雖然現在慢慢減少了對jQuery的使用(項目上還是用,效率高點。平時基本不用了),希望從而減少對jQuery的依賴度。 但是這鏈式操作的方式實在吸引人(貌似現在不少新庫都採用了鏈式操作)。 新手無畏嘛,所以寫了以下代碼。主要是避免以後又忘了,呵呵。 複製代碼 代碼如下: window.k = function() { return new k.fn.init(arguments); } k.fn = k.prototype = { init:function() { this.length =
Time of Update: 2017-01-18
在查了大量的資料後,我總結了下面的三條規則,這三條規則,已經可以解決目前我所遇到的所有問題.規則0:函數本身是一個特殊類型,大多數時候,可以認為是一個變數。 複製代碼 代碼如下: function a() { alert(this); } 或者 var a = function() { alert(this); } 都可以認為是建立了一個變數,這個變數的值就是一個函數。 規則1:如果一個函數,是某個對象的key 值,那麼,this就指向這個對象。 這個規則很好理解: 複製代碼 代碼如下:
Time of Update: 2017-01-18
單體模式(singleton) 單體是在指令碼載入時建立的,能將一系列有關聯的變數和方法組織為一個邏輯單元,邏輯單元裡面的內容通過單一的變數進行訪問; 一個單體主要分為三部分 用於訪問內部資訊的入口變數(如:Sky) 屬性(如:nickName/age/timeInfo) 方法(如:sayHello) 基本結構 複製代碼 代碼如下: var Sky = { /* * 作用一,變數管理 */ nickName: "sky", age: "26", /* * 作用二,載入中初始設定變數 *
Time of Update: 2017-01-18
1:建構函式法 [Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行] 註解: 1:這裡定義了一個Dog對象(在javascript中,函數就是對象,這裡function Dog(name,weight) 同時也是建構函式),用new關鍵字建立了一個對象執行個體dog。 2:其中_name、_weight、_show、_sex為執行個體dog的屬性。可以通過:執行個體名.屬性名稱 或 執行個體名[“屬性名稱”]訪問執行個體屬性,即dog._name=dog["_name"]。 3