溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

tangram.js庫實現(xiàn)js類的方式實例分析

發(fā)布時間:2020-10-03 20:02:58 來源:腳本之家 閱讀:175 作者:qq_26222859 欄目:web開發(fā)

本文實例講述了tangram.js庫實現(xiàn)js類的方式。分享給大家供大家參考,具體如下:

前面一篇https://www.jb51.net/article/25781.htm對tangram.js庫做了較為詳細的介紹,這里結(jié)合實例分析一下tangram.js庫實現(xiàn)js類的方式。代碼如下:

/*
 * Tangram
 * Copyright 2010 Baidu Inc. All rights reserved.
 *
 * @author: meizz
 * @namespace: baidu.lang.createClass
 * @version: 1.6.0
 */
///import baidu.lang;
///import baidu.lang.Class;
///import baidu.lang.Event;
/**
 * 創(chuàng)建一個類,包括創(chuàng)造類的構(gòu)造器、繼承基類Class
 * @name baidu.lang.createClass
 * @function
 * @grammar baidu.lang.createClass(constructor[, options])
 * @param {Function} constructor 類的構(gòu)造器函數(shù)
 * @param {Object} [options]
 * @config {string} [type] 類名
 * @config {Function} [superClass] 父類,默認為baidu.lang.Class
 * @version 1.2
 * @remark
 *
      使用createClass能方便的創(chuàng)建一個帶有繼承關(guān)系的類。同時會為返回的類對象添加extend方法,使用obj.extend({});可以方便的擴展原型鏈上的方法和屬性
 * @see baidu.lang.Class,baidu.lang.inherits
 *
 * @returns {Object} 一個類對象
 */
baidu.lang.createClass = /**@function*/function(constructor, options) {
  options = options || {};
  var superClass = options.superClass || baidu.lang.Class;
  // 創(chuàng)建新類的真構(gòu)造器函數(shù)
  var fn = function(){
    var me = this;
    // 20101030 某類在添加該屬性控制時,guid將不在全局instances里控制
    options.decontrolled && (me.__decontrolled = true);
    // 繼承父類的構(gòu)造器
    superClass.apply(me, arguments);
    // 全局配置
    for (i in fn.options) me[i] = fn.options[i];
    constructor.apply(me, arguments);
    for (var i=0, reg=fn["\x06r"]; reg && i<reg.length; i++) {
      reg[i].apply(me, arguments);
    }
  };
  // [TODO delete 2013] 放置全局配置,這個全局配置可以直接寫到類里面
  fn.options = options.options || {};
  var C = function(){},
    cp = constructor.prototype;
  C.prototype = superClass.prototype;
  // 繼承父類的原型(prototype)鏈
  var fp = fn.prototype = new C();
  // 繼承傳參進來的構(gòu)造器的 prototype 不會丟
  for (var i in cp) fp[i] = cp[i];
  // 20111122 原className參數(shù)改名為type
  var type = options.className || options.type;
  typeof type == "string" && (fp.__type = type);
  // 修正這種繼承方式帶來的 constructor 混亂的問題
  fp.constructor = cp.constructor;
  // 給類擴展出一個靜態(tài)方法,以代替 baidu.object.extend()
  fn.extend = function(json){
    for (var i in json) {
      fn.prototype[i] = json[i];
    }
    return fn; // 這個靜態(tài)方法也返回類對象本身
  };
  return fn;
};

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)》

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI