国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
當前位置: 首頁 - 科技 - 知識百科 - 正文

JavaScript強化教程――Cocos2d-JS中JavaScript繼承

來源:懂視網 責編:小采 時間:2020-11-27 20:26:07
文檔

JavaScript強化教程――Cocos2d-JS中JavaScript繼承

JavaScript強化教程――Cocos2d-JS中JavaScript繼承:JavaScript語言本身沒有提供類,沒有其它語言的類繼承機制,它的繼承是通過對象的原型實現的,但這不能滿足Cocos2d-JS引擎的要求。由于Cocos2d-JS引擎是從Cocos2d-x演變而來的,在Cocos2d-JS的早期版本Cocos2d-HTML中幾乎全部的API都是模擬Co
推薦度:
導讀JavaScript強化教程――Cocos2d-JS中JavaScript繼承:JavaScript語言本身沒有提供類,沒有其它語言的類繼承機制,它的繼承是通過對象的原型實現的,但這不能滿足Cocos2d-JS引擎的要求。由于Cocos2d-JS引擎是從Cocos2d-x演變而來的,在Cocos2d-JS的早期版本Cocos2d-HTML中幾乎全部的API都是模擬Co

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非常的重要。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript強化教程――Cocos2d-JS中JavaScript繼承

JavaScript強化教程――Cocos2d-JS中JavaScript繼承:JavaScript語言本身沒有提供類,沒有其它語言的類繼承機制,它的繼承是通過對象的原型實現的,但這不能滿足Cocos2d-JS引擎的要求。由于Cocos2d-JS引擎是從Cocos2d-x演變而來的,在Cocos2d-JS的早期版本Cocos2d-HTML中幾乎全部的API都是模擬Co
推薦度:
標簽: js co javascript
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top 主站蜘蛛池模板: 国模沟沟一区二区三区 | 丰满老熟好大bbbxxx | 欧美一区二区三区在线播放 | 国产91成人 | 亚洲 欧美 日韩在线 | 久久久国产成人精品 | 国产免费网| 久久性 | 欧美日韩亚洲高清不卡一区二区三区 | 亚洲视频一区二区 | 国产视频一区二区 | 亚洲欧美天堂网 | 美女视频黄a视频全免费应用 | 日本 黄 a | 久久伊人免费视频 | 国产伦精品一区二区三区视频小说 | 美女一区 | 欧美视频区| 国产96在线 | 日本免费一区二区三区 | 不卡一级aaa全黄毛片 | 亚洲精品99久久久久中文字幕 | 久久久久女人精品毛片九一 | 精品一区二区三区三区 | 久久精品成人国产午夜 | 性欧美高清 | 久久精品综合国产二区 | a级免费在线观看 | 国产精品自在欧美一区 | 国产一级内谢a级高清毛片 国产最新精品视频 | 欧美 日韩 亚洲另类专区 | 国产精品免费观看 | 国产精品久久久久999 | 日韩影音| 日韩成人国产精品视频 | 欧美视频一区二区三区在线观看 | 精品国产综合区久久久久99 | 国产日韩欧美自拍 | 国产一区三区二区中文在线 | 国产成人久久777777 | 国产精品久久久久无码av |