JavaScript語言本身沒有提供類,沒有其它語言的類別繼承機制,它的繼承是透過物件的原型實現的,但這不能滿足Cocos2d-JS引擎的要求。由於Cocos2d-JS引擎是從Cocos2d-x演變而來的,在Cocos2d-JS的早期版本Cocos2d-HTML中幾乎全部的API都是模擬Cocos2d-x API而設計的,Cocos2d-x本身是有C++編寫的,其中的許多物件和函數比較複雜,JavaScript語言描述起來有些力不從心了。
在開源社群中John Resiq在他的部落格(http://ejohn.org/blog/simple-j ... ance/)中提供了一種簡單JavaScript繼承(Simple JavaScript Inheritance)方法。
John Resiq的簡單JavaScript繼承方法靈感來自原型繼承機制,它具有與Java等物件導向一樣的類別概念,並且他設計了所有類別的根類別Class,它的程式碼如下:
/* Simple JavaScript Inheritance * By John Resig http://ejohn.org/ * MIT Licensed. */ // Inspired by base2 and Prototype (function(){ var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; // The base Class implementation (does nothing) this.Class = function(){}; // Create a new Class that inherits from this class Class.extend = function(prop) { var _super = this.prototype; // Instantiate a base class (but only create the instance, // don't run the init constructor) initializing = true; var prototype = new this(); initializing = false; // Copy the properties over onto the new prototype for (var name in prop) { // Check if we're overwriting an existing function prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function(name, fn){ return function() { var tmp = this._super; // Add a new ._super() method that is the same method // but on the super-class this._super = _super[name]; // The method only need to be bound temporarily, so we // remove it when we're done executing var ret = fn.apply(this, arguments); this._super = tmp; return ret; }; })(name, prop[name]) : prop[name]; } // The dummy class constructor function Class() { // All construction is actually done in the init method if ( !initializing && this.init ) this.init.apply(this, arguments); } // Populate our constructed prototype object Class.prototype = prototype; // Enforce the constructor to be what we expect Class.prototype.constructor = Class; // And make this class extendable Class.extend = arguments.callee; return Class; }; })();
與Java中的Object一樣所有類別都直接或間接繼承於Class,以下是繼承Class實例:
var Person = Class.extend({ ① init: function (isDancing) { ② this.dancing = isDancing; }, dance: function () { ③ return this.dancing; } }); var Ninja = Person.extend({ ④ init: function () { ⑤ this._super(false); ⑥ }, dance: function () { ⑦ // Call the inherited version of dance() return this._super(); ⑧ }, swingSword: function () { ⑨ return true; } }); var p = new Person(true); ⑩ console.log(p.dance());// true var n = new Ninja(); console.log(n.dance()); // false console.log(n.swingSword()); // true
如果你對於Java語言的物件導向很熟悉的話,應該很容易看懂。其中第①行程式碼是宣告Person類,它繼承自Class,Class.extend()表示繼承自Class。第②行程式碼的定義建構函式init,它的作用是初始化屬性。第③行程式碼是定義普通函數dance(),它可以回傳屬性dancing。
第④行程式碼是宣告Ninja類別繼承自Person類,第⑤行程式碼的定義建構函式init,在該函式中this._super(false)語句是呼叫父類別建構函式初始化父類別中的屬性,見程式碼第⑥行所示。第⑦行程式碼是重寫dance()函數,它會覆寫父類別的dance()函數。第⑧行程式碼是this._super()是呼叫父類別的dance()函數。第⑨行程式碼是子類別Ninja新加入的函數swingSword()。
第⑩行程式碼透過Person類別建立p對象,給構造函數的參數是true。第行程式碼是列印日誌p物件dance屬性,結果為true。
第行程式碼透過Ninja類別建立n對象,建構函數的參數為空,預設初始化採用false初始化父類別中的dance屬性。因此在程式碼第行列印為false。
這種簡單JavaScript繼承方法事實上實作了一般意義上的物件導向概念的繼承和多型機制。這種簡單JavaScript繼承方法是Cocos2d-JS繼承機制的核心,Cocos2d-JS稍微做了修改,熟悉簡單JavaScript繼承的用法對於理解和學習Cocos2d-JS非常的重要。
以上就是JavaScript強化教學――Cocos2d-JS中JavaScript繼承的內容,更多相關內容請關注PHP中文網(www.php.cn)!

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版
好用的JavaScript開發工具