目录

  • 主要包含 CCEnum.js id-generater.js js.js

    • CCEnum.js
    • id-generater.js
    • js.js
      • js 对象上包含了一些通用的方法:

主要包含 CCEnum.js id-generater.js js.js

CCEnum.js

Enum 作用是用来创建一个枚举类型.基本使用:

let Dir = cc.Enum({Up:-1,Down:-1,Left:-1,Right:-1});

则 Dir.Up = 0, Dir.Down = 1, Dir.Left = 2, Dir.Right = 3;

id-generater.js

IdGenerater 用来产生id, getNewId 方法会递增 id.

js.js

function _getPropertyDescriptor (obj, name) {while (obj) {var pd = Object.getOwnPropertyDescriptor(obj, name);if (pd) {return pd;}obj = Object.getPrototypeOf(obj);}return null;
}

此方法获取 obj 对象上 name 属性的描述. 如果对象本身不包含name属性,则会检查原型链.

function _copyprop(name, source, target) {var pd = _getPropertyDescriptor(source, name);Object.defineProperty(target, name, pd);
}

此方法会,将 source上name所表示的属性,复制到target对象上.

js 对象上包含了一些通用的方法:

  1. 判断是否是 number 和 string. (isNumber,isString)

  2. addon
// Copy all properties not defined in obj from arguments[1...n]
addon: function (obj) {'use strict';obj = obj || {};for (var i = 1, length = arguments.length; i < length; i++) {var source = arguments[i];if (source) {if (typeof source !== 'object') {cc.errorID(5402, source);continue;}for ( var name in source) {if ( !(name in obj) ) {_copyprop( name, source, obj);}}}}return obj;},

如:

let obj = {name:'obj'};
js.addon(obj,{name:'zhangsan',age:12},{weight:22});
// obj 会有 name  age weight,属性. 但是name属性不会被覆盖
  1. mixin
    和 addon方式类似,但是会覆盖原来的对象的属性.

  2. extend (cls, base)
    实现 原型链 继承. cls 继承 base.

  3. getSuper (ctor)
    获取 ctor的 父类的构造函数

  4. isChildClassOf (subclass, superclass)
    检查 subclass 是否是 superclass 的子类.

  5. clear (obj)
    删除 clear 自身上的 所有属性.

  6. isEmptyObject (obj)
    判断是否是空对象.

  7. js.value (obj, prop, value, writable, enumerable)
    设置对象obj的属性prop的描述

  8. js.getset(obj, prop, getter, setter, enumerable, configurable)
    设置对象 obj 的 prop 属性的 get set 描述

  9. js.get/set(obj, prop, getter, enumerable, configurable)
    设置对象 obj 的 prop 属性的 get/set 描述

  10. js.getClassName (objOrCtor)
    Get class name of the object, if object is just a {} (and which class named 'Object'), it will return "".
    获取 objOrCtor 的类名.

  11. id 注册.
// id 注册
(function () {var _idToClass = {};var _nameToClass = {};function setup (key, publicName, table) {js.getset(js, publicName,function () {return Object.assign({}, table);},function (value) {js.clear(table);Object.assign(table, value);});return function (id, constructor) {// deregister oldif (constructor.prototype.hasOwnProperty(key)) {delete table[constructor.prototype[key]];}js.value(constructor.prototype, key, id);// register classif (id) {var registered = table[id];if (registered && registered !== constructor) {var error = 'A Class already exists with the same ' + key + ' : "' + id + '".';if (CC_TEST) {error += ' (This may be caused by error of unit test.) \
If you dont need serialization, you can set class id to "". You can also call \
cc.js.unregisterClass to remove the id of unused class';}cc.error(error);}else {table[id] = constructor;}//if (id === "") {//    console.trace("", table === _nameToClass);//}}};}/*** Register the class by specified id, if its classname is not defined, the class name will also be set.* @method _setClassId* @param {String} classId* @param {Function} constructor* @private*//*** !#en All classes registered in the engine, indexed by ID.* !#zh 引擎中已注册的所有类型,通过 ID 进行索引。* @property _registeredClassIds* @example* // save all registered classes before loading scripts* let builtinClassIds = cc.js._registeredClassIds;* let builtinClassNames = cc.js._registeredClassNames;* // load some scripts that contain CCClass* ...* // clear all loaded classes* cc.js._registeredClassIds = builtinClassIds;* cc.js._registeredClassNames = builtinClassNames;*/js._setClassId = setup('__cid__', '_registeredClassIds', _idToClass);/*** !#en All classes registered in the engine, indexed by name.* !#zh 引擎中已注册的所有类型,通过名称进行索引。* @property _registeredClassNames* @example* // save all registered classes before loading scripts* let builtinClassIds = cc.js._registeredClassIds;* let builtinClassNames = cc.js._registeredClassNames;* // load some scripts that contain CCClass* ...* // clear all loaded classes* cc.js._registeredClassIds = builtinClassIds;* cc.js._registeredClassNames = builtinClassNames;*/var doSetClassName = setup('__classname__', '_registeredClassNames', _nameToClass);/*** Register the class by specified name manually* @method setClassName* @param {String} className* @param {Function} constructor*/js.setClassName = function (className, constructor) {doSetClassName(className, constructor);// auto set class idif (!constructor.prototype.hasOwnProperty('__cid__')) {var id = className || tempCIDGenerater.getNewId();if (id) {js._setClassId(id, constructor);}}};/*** Unregister a class from fireball.** If you dont need a registered class anymore, you should unregister the class so that Fireball will not keep its reference anymore.* Please note that its still your responsibility to free other references to the class.** @method unregisterClass* @param {Function} ...constructor - the class you will want to unregister, any number of classes can be added*/js.unregisterClass = function () {for (var i = 0; i < arguments.length; i++) {var p = arguments[i].prototype;var classId = p.__cid__;if (classId) {delete _idToClass[classId];}var classname = p.__classname__;if (classname) {delete _nameToClass[classname];}}};/*** Get the registered class by id* @method _getClassById* @param {String} classId* @return {Function} constructor* @private*/js._getClassById = function (classId) {return _idToClass[classId];};/*** Get the registered class by name* @method getClassByName* @param {String} classname* @return {Function} constructor*/js.getClassByName = function (classname) {return _nameToClass[classname];};/*** Get class id of the object* @method _getClassId* @param {Object|Function} obj - instance or constructor* @param {Boolean} [allowTempId=true] - can return temp id in editor* @return {String}* @private*/js._getClassId = function (obj, allowTempId) {allowTempId = (typeof allowTempId !== 'undefined' ? allowTempId: true);var res;if (typeof obj === 'function' && obj.prototype.hasOwnProperty('__cid__')) {res = obj.prototype.__cid__;if (!allowTempId && (CC_DEV || CC_EDITOR) && isTempClassId(res)) {return '';}return res;}if (obj && obj.constructor) {var prototype = obj.constructor.prototype;if (prototype && prototype.hasOwnProperty('__cid__')) {res = obj.__cid__;if (!allowTempId && (CC_DEV || CC_EDITOR) && isTempClassId(res)) {return '';}return res;}}return '';};
})();
/**
1. js.setClassName(className, constructor)
通过给 constructor.prototype 添加  __classname__ 属性,
再 使用 className 作为key,constructor 作为value,
存放在 _registeredClassNames 这个对象中.然后,检查 constructor.prototype 的 __cid__ 这个属性, 通过 __cid__ 的值(如果不存在,则会生成一个)作为key,
constructor 做为value,存放在 _registeredClassNames 这个对象中.2. js.unregisterClass
就是 删除 已经注册的 constructor, 会删除 constructor.prototype 上的 __classname__ 和 __cid__ 属性.3. 其他的方法就是根据 id 或者  classname,去查找存放的 constructor.**/
  1. js.obsolete (obj, obsoleted, newExpr, writable)
    相当于使用 newExpr属性 代替原来的 obsoleted 属性.

  2. js.formatStr
    如:
cc.js.formatStr("a: %s, b: %s", a, b);

返回格式化字符串.

  1. js.shiftArguments
    返回 从第2个参数开始的数组. 相当于 Array.prototype.slice.call(arguments,1)

  2. js.createMap
    相当于 Object.create(null)

  3. removeAt (array, index)
    删除 array中 所以为 index 的元素

  4. fastRemoveAt (array, index)
    直接使用 最后一个元素替换掉 index位置的元素,然后length减1.

  5. remove (array, value)
    删除 array 中,第一个值为 value 的元素. 如果存在 返回true,否则返回 false

  6. fastRemove (array, value)
    类似 fastRemoveAt

  7. verifyType (array, type)
    验证 array 中的元素 是否都是 type 类型. 如果都是 则返回true,否则返回 false.

  8. removeArray (array, minusArr)
    从 array 中删除 minusArr数组中的 值.

  9. appendObjectsAt (array, addObjs, index)
    如:
var arr = [1,2,3,4,5];
appendObjectsAt(arr,[7,8,9],1);
console.log(arr);   // [ 1, 7, 8, 9, 2, 3, 4, 5 ]
  1. contains (array, value)
    array 中 是否包含 value. 包含返回 true,否则返回 false

  2. copy (array)
    返回 array 的一个副本.(浅拷贝)

  3. js.Pool
    注意:对象池刚创建的时候,当前可用的对象数量是0.
    Pool对象主要需要包含几个方法:
a. get 方法.  这个需要使用的用户 自己实现.b. _get 方法,会检查当前对象池中是否有可用的对象. 如果有,则返回一个可用的对象,否则返回nullc. put 方法. 把一个不在需要的对象放回对象池.池中可用的对象会加1d. resize 方法. 会增大/减少对象池的大小.

自带的两个使用 Pool 的例子:

/*
*Example 1:**function Details () {*    this.uuidList = [];*};*Details.prototype.reset = function () {*    this.uuidList.length = 0;*};*Details.pool = new js.Pool(function (obj) {*    obj.reset();*}, 5);*Details.pool.get = function () {*    return this._get() || new Details();*};**var detail = Details.pool.get();*...*Details.pool.put(detail);**Example 2:**function Details (buffer) {*    this.uuidList = buffer;*};*...*Details.pool.get = function (buffer) {*    var cached = this._get();*    if (cached) {*        cached.uuidList = buffer;*        return cached;*    }*    else {*        return new Details(buffer);*    }*};**var detail = Details.pool.get( [] );*/

转载于:https://www.cnblogs.com/daihanlong/p/10328344.html

platform下的js分析_1相关推荐

  1. mac环境下node.js和phonegap/cordova创建ios和android应用

    mac环境下node.js和phonegap/cordova创建ios和android应用 一介布衣  2015-01-12   nodejs  6888 分享到:QQ空间新浪微博腾讯微博人人网微信 ...

  2. 后端程序员看前端想死(二)进入页面之后js分析

    在上一篇中分析了一下以网页的组成.header中引入的乱七八糟的东西,现在进入到js中进行分析了 tuhooo啊,你是要搞前端了么? nonono,好玩,学一下 打开页面之后执行js的几种方法 直接写 ...

  3. 3、Spark 和 D3.js 分析航班大数据

    实验资源 1998.csv airports.csv 实验环境 VMware Workstation Ubuntu 16.04 spark-2.4.5 scala-2.12.10 实验内容 " ...

  4. python爬虫之网易云歌曲下载(需要js分析) -- 2020.06.20更新

    背景 目的 >>> 通过python + kivy打包一个简易的网易云会员歌曲下载软件; 初试 >>> 用you-get库里面的网易云接口来实现下载; 失败 > ...

  5. python爬取鬼灭漫画+简单JS分析

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨皖渝 源自丨快学python(ID:kxpyt ...

  6. Python爬虫实战(四) Python鬼灭漫画爬取+简单JS分析

    本次爬取仅供学习,无任何商业用途 猪油骨,拿来卤~今天,来分享一下python图片爬取+简单JS分析 爬取网址:漫画地址 (这个网站只更新到188话,实际上已经有200多话了) 目录 一.获取所有章节 ...

  7. js 分析——百度模拟登录(二)

    上一篇百度模拟登录(一)主要讲解了 token.gid.rsakey 以及 password 等参数的产生.好了,废话不多说,咱们进入今天的主题,主要分析 ppui_logintime.ds.tk.d ...

  8. 爱奇艺视频wasm转js分析,cmd5x算法脱离环境限制

    爱奇艺视频wasm转js分析,cmd5x算法脱离环境限制 1.js代码扣取 2.ast反混淆,平坦流 3.脱离环境与调用 1.js代码扣取 文献1:XX视频H5解析分析过程 文献2:爱奇艺视频cmd5 ...

  9. SpringMVC源码分析_1 SpringMVC容器启动和加载原理

                                                                    SpringMVC源码分析_1 SpringMVC启动和加载原理     ...

最新文章

  1. 规范的 Commit Message
  2. TypeError: ord() expected a character, but string of length 6 found
  3. 数据库基础笔记(MySQL)5 —— 基础索引
  4. 管理员必知:服务器基准测试方法与误区
  5. Register-SPWorkflowService 远程服务器返回错误: (404) 未找到
  6. s5-1 网络层引言
  7. matlab复数方程的根,matlab解一元三次方程,得到的都是复数根。
  8. hdu 4539(状压dp)
  9. 将某一类型文件还原为无默认打开方式
  10. Docker和容器简介
  11. WebService学习总结(5)——WebService常见开发框架比较
  12. Cygwin编译自己定义OpenCV库报错:opencv_contrib: LOCAL_SRC_FILES points to a missing file
  13. 常见的算法题目分类图
  14. Docker存储驱动之总览
  15. Makefile 编写规则
  16. Emulator: Process finished with exit code -1073741515 (0xC0000135)错误
  17. ntp 服务 --Centos
  18. 重力感应贪吃蛇(C51 MPU6050 8*8LED点阵)
  19. 本地win10安装的MySQL8.0.12用navicat12报错 2509 -Authentication plugin ' caching_sha2_password' cannot be :
  20. docker与宿主机共享内存通信

热门文章

  1. 硬件厂商纷纷“变软”:FPGA行业巨头Xilinx推出Vitis AI平台,并在GitHub上开源
  2. ssm中shiro的使用
  3. KaiOS 超越 iOS 成为印度第二大移动操作系统
  4. -bash: make: command not found的解决办法
  5. Web3DGame之路,Babylonjs 和TypeScript学习笔记(二)
  6. PyQt 编程基本思想-HelloWorld
  7. Java JVM内存分析
  8. 海量大数据处理最新面试题-1
  9. IE6-IE9兼容性问题列表及解决办法_补遗漏之一:button的type默认值改变为submit了。...
  10. outlook 突然发信不正常