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 window.onload 加载多个函数的方法
Nov 02 Javascript
jQuery对下拉框,单选框,多选框的操作
Feb 21 Javascript
$.each与$().each的区别示例介绍
Mar 20 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
Apr 04 Javascript
jQuery检测输入的字符串包含的中英文的数量
Apr 17 Javascript
jQuery实现的仿百度分页足迹效果代码
Oct 30 Javascript
如何使用Bootstrap 按钮实例详解
Mar 29 Javascript
JavaScript对JSON数据进行排序和搜索
Jul 24 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
Oct 26 Javascript
es6 for循环中let和var区别详解
Jan 12 Javascript
Vue按时间段查询数据组件使用详解
Aug 21 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
Jan 11 Javascript
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一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
php向js函数传参的几种方法
2014/08/10 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
javascript new一个对象的实质
2010/01/07 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
jQuery获取随机颜色的实例代码
2018/05/21 jQuery
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
2020/05/10 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
自我评价个人范文
2013/12/16 职场文书
经济国贸专业求职信
2014/06/18 职场文书
化工专业求职信
2014/07/01 职场文书
新郎新娘答谢词
2015/01/04 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
勇敢的心观后感
2015/06/09 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python