tangram.js库实现js类的方式实例分析


Posted in Javascript onJanuary 06, 2018

本文实例讲述了tangram.js库实现js类的方式。分享给大家供大家参考,具体如下:

前面一篇https://3water.com/article/25781.htm对tangram.js库做了较为详细的介绍,这里结合实例分析一下tangram.js库实现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;
/**
 * 创建一个类,包括创造类的构造器、继承基类Class
 * @name baidu.lang.createClass
 * @function
 * @grammar baidu.lang.createClass(constructor[, options])
 * @param {Function} constructor 类的构造器函数
 * @param {Object} [options]
 * @config {string} [type] 类名
 * @config {Function} [superClass] 父类,默认为baidu.lang.Class
 * @version 1.2
 * @remark
 *
      使用createClass能方便的创建一个带有继承关系的类。同时会为返回的类对象添加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;
  // 创建新类的真构造器函数
  var fn = function(){
    var me = this;
    // 20101030 某类在添加该属性控制时,guid将不在全局instances里控制
    options.decontrolled && (me.__decontrolled = true);
    // 继承父类的构造器
    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();
  // 继承传参进来的构造器的 prototype 不会丢
  for (var i in cp) fp[i] = cp[i];
  // 20111122 原className参数改名为type
  var type = options.className || options.type;
  typeof type == "string" && (fp.__type = type);
  // 修正这种继承方式带来的 constructor 混乱的问题
  fp.constructor = cp.constructor;
  // 给类扩展出一个静态方法,以代替 baidu.object.extend()
  fn.extend = function(json){
    for (var i in json) {
      fn.prototype[i] = json[i];
    }
    return fn; // 这个静态方法也返回类对象本身
  };
  return fn;
};

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js跨域和ajax 跨域问题的实现思路
Sep 05 Javascript
jQuery中(function(){})()执行顺序的理解
Mar 05 Javascript
Javascript Objects详解
Sep 04 Javascript
node.js中的fs.truncateSync方法使用说明
Dec 15 Javascript
JQuery实现动态适时改变字体颜色的方法
Mar 10 Javascript
vue2.0 根据状态值进行样式的改变展示方法
Mar 13 Javascript
Node.js的Koa实现JWT用户认证方法
May 05 Javascript
Vue SPA单页应用首屏优化实践
Jun 28 Javascript
vue 实现根据data中的属性值来设置不同的样式
Aug 04 Javascript
vue实现tab栏点击高亮效果
Aug 19 Javascript
如何实现vue的tree组件
Dec 03 Vue.js
vue中实现点击空白区域关闭弹窗的两种方法
Dec 30 Vue.js
JavaScript寄生组合式继承实例详解
Jan 06 #Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 #jQuery
JS实现非首屏图片延迟加载的示例
Jan 06 #Javascript
jQuery中库的引用方法
Jan 06 #jQuery
基于JavaScript中标识符的命名规则介绍
Jan 06 #Javascript
js生成word中图片处理方法
Jan 06 #Javascript
详解webpack中的hash、chunkhash、contenthash区别
Jan 05 #Javascript
You might like
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
pymongo中group by的操作方法教程
2019/03/22 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
Python json读写方式和字典相互转化
2020/04/18 Python
任意存:BOXFUL
2018/05/21 全球购物
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
工作时间上网检讨书
2014/02/03 职场文书
经贸韩语专业大学生职业规划
2014/02/14 职场文书
学校就业推荐信范文
2014/05/19 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
行政申诉状范文
2015/05/20 职场文书
借条如何写
2015/05/26 职场文书
婚育证明样本
2015/06/16 职场文书
2019 入党申请书范文
2019/07/10 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书