var函数

设计模式JavaScript实现

为君一笑 提交于 2019-12-03 07:40:48
GoF合作出版的《设计模式》这本书提供了许多有关与面向对象软件设计中常见问题的解决方案。这些模式已经出现了相当长的一段时间,已经被证明在许多情况下都非常有用。 单体模式 一个特定类仅有一个实例。这意味着当您第二次使用同一个类创建新对象的时候,应该得到与第一次所创建对象完全相同对象。 使用对象字面量创建一个简单的对象也是一个单体的例子,因为在JavaScript中没有类,只有对象。当您创建一个新对象时,实际上没有其他对象与其类似,因此新对象已经是单体了。 var obj = { myprop: 'my value' }; 使用new操作符 JavaScript没有类,但是可以通过new语法使用构造函数来创建对象,有时有可能需要使用这种语法的单体实现。这种思想在于当使用同一个构造函数以new操作符来创建多个对象时,应该仅获得指向完全相同的对象的新指针。 静态属性中的实例 在构造函数的静态属性中缓存该实例。您可以使用类似Universe.instance的属性并将实例缓存在该属性中。这中方案的缺点在于instance属性是公开可访问的属性,在外部代码中可能会修改该属性。 function Universe() { if (typeof Universe.instance === 'object') { return Universe.instance; } this.start_time

JavaScript的数组操作

╄→гoц情女王★ 提交于 2019-12-03 07:40:43
JavaScript的数组操作 JavaScript数组也是对象,它使用单一的变量存储一系列的值。 数组和对象的区别 在JavaScript中,数组必须使用数字索引,对象可以使用命名索引。 数组是特殊类型的对象,具有特有的一些属性和方法。 如何区分数组和对象 方案1 ECMAScript5定义新方法Array.isArray() var arr = []; var obj = {}; console.log(Array.isArray(arr)); // true console.log(Array.isArray(obj)); // false 此方案不支持老的浏览器。 方案2 var arr = []; console.log(Object.prototype.toString.call(arr)); // [object Array] var obj = {}; console.log(Object.prototype.toString.call(obj)); // [object Object] 创建 使用字面量创建 var arr = []; 使用构造函数创建 var arr = new Array(); console.log(arr); // [] arr = new Array(2); console.log(arr); // [empty × 2]

【译】快速入门ES6解构以及rest参数语法

我怕爱的太早我们不能终老 提交于 2019-12-03 07:38:00
本文转载于: 猿2048 网站➜ https://www.mk2048.com/blog/blog.php?id=h22iibhjab 原文: https://gist.github.com/yang-wei/3d35e8692dbc6cc0f98d 写在前面 我们首先会讨论如何在ES6中对数组以及对象使用解构(destructing)和rest参数语法。然后我们接下来再看一些例子,并且讨论一些quiz。 数组 var array = [1, 2, 3, 4]; var nestedArray = [1, 2, 3, 4, [7, 8, 9]]; var [a, b, c, d] = array; console.log(a, b, c, d) // -------- 1 2 3 4 var [a, , , d, [x, y, z]] = nestedArray; console.log(a, d, x, y, z) // -------- 1 4 7 8 9 使用rest参数语法,可以省略参数的个数: var [a, b, c] = array; console.log(a, b, c) // -------- 1 2 3 // rest parameter var [a, b, ...c] = array; console.log(c); // [3, 4]

Cesium学习笔记-工具篇20-PrimitiveTexture自定义渲染-贴图【转】

為{幸葍}努か 提交于 2019-12-03 07:37:25
前几篇博客我们了解了自定义点、线、面绘制,这篇我们接着学习cesium自定义纹理贴图。我们完成点线面的绘制,只是绘制出了对象的框架,没有逼真的外观。逼真外观是需要设置材质来实现:Material 。 再次查看appearance对象: image.png 属性里面的material就是设置对象的材质,查看material: image.png 我们发现,cesium提供很多材质接口,如果要自定义设置纹理贴图,我们使用fabric接口定义自己材质。 首先看cesium给出的demo: image.png 我们看到在uniforms属性设置通过type设置类型、通过uniforms设置对应值。 1、首先我们新加着色代码,设置材质: image.png 2、修改顶点着色器代码: image.png 3、修改片源着色器源码: image.png 4、修改CreateGeometry函数。这里,我们看到将颜色换成了UV坐标: image.png 5、修改CreateAppearence函数,在uniform的url关联纹理: image.png 直接上示例源码(因为我也不知道为何这样写): var viewer = new Cesium.Viewer('cesiumContainer'); //封装PrimitiveTexture var PrimitiveTexture= (

ES6 Map

孤者浪人 提交于 2019-12-03 07:09:23
Map 对象 Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。 Maps 和 Objects 的区别 一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。 Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。 Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。 Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。 Map 中的 key key 是字符串 var myMap = new Map ( ) ; var keyString = " a string " ; myMap . set ( keyString , " 和键'a string'关联的值 " ) ; myMap . get ( keyString ) ; // "和键'a string'关联的值" myMap . get ( " a string " ) ; // "和键'a string'关联的值" // 因为 keyString === 'a string' key 是对象 var myMap = new Map ( ) ; var keyObj = { } , myMap . set ( keyObj , " 和键 keyObj 关联的值 " ) ;

一些封装函数

青春壹個敷衍的年華 提交于 2019-12-03 06:43:10
js``` //解析URL function parseURL(url) { var a = document.createElement('a'); a.href = url; return { source: url, protocol: a.protocol.replace(':',''), host: a.hostname, port: a.port, query: a.search, params: (function(){ var ret = {}, seg = a.search.replace(/^?/,'').split('&'), len = seg.length, i = 0, s; for (;i<len;i++) { if (!seg[i]) { continue; } s = seg[i].split('='); ret[s[0]] = s[1]; } return ret; })(), file: (a.pathname.match(//([^\/?#]+)$/i) || [,''])[1], hash: a.hash.replace('#',''), path: a.pathname.replace(/^([^\/])/,'/$1'), relative: (a.href.match(/tps?://[^\/]+(.+)/) || [,''])[1],

关于作用域闭包的一些理解

﹥>﹥吖頭↗ 提交于 2019-12-03 04:58:32
闭包 红宝书上对闭包的定义:有权访问另外一个函数作用域中变量的函数。 MDN对闭包的定义是:是能够访问自由变量的函数。 自由变量:是指在当前函数中可以使用的( 但是既不是arguments也不是本函数定义的局部变量 )。 两个点: 是个函数 能访问另一个函数作用域中的变量,即使外层函数的上下文已经被销毁 就是说我们常见的比如 内部函数从外部函数返回 这种状态,该内部函数就是闭包。可以看如下特性中的示例! 说明闭包的几个特性: 可以访问当前函数以外的变量 function outer() { var date = '11月1日'; function inner(str) { console.log(str + date) } return inner('today is ') } outer() function outer() { var date = '11月1日'; return function () { console.log('today is ' + date) }() } outer() // 上下两例均返回“today is 11月1日” 即使外部函数已经返回,闭包仍然能够访问外部定义的变量 function outer() { var date = '11月1日'; function inner() { console.log('today is ' + date

cookie封装函数

狂风中的少年 提交于 2019-12-03 04:41:06
cookie 写入的封装,读取的封装,删除某个属性的封装 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <button class="btn">按钮</button> <script> function setCookie(attr,value,expires){ var date=new Date(); var time =date.getTime()+expires*24*3600*1000; date.setTime(time); document.cookie=attr+"="+value+";expires="+date.toUTCString() } setCookie("dfc",11,1); setCookie("lx",222,1); setCookie("hh",33,1); function getCookie(attr) { var cookie

ajax方式下载文件

匿名 (未验证) 提交于 2019-12-03 00:41:02
<button type="button" onclick="download()">导出</button> function download() { var url = ‘download/?filename=aaa.txt‘ ; var xhr = new XMLHttpRequest(); xhr.open( ‘GET‘, url, true ); // 也可以使用POST方式,根据接口 xhr.responseType = "blob"; // 返回类型blob // 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑 xhr.onload = function () { // 请求完成 if ( this .status === 200 ) { // 返回200 var blob = this .response; var reader = new FileReader(); reader.readAsDataURL(blob); // 转换为base64,可以直接放入a表情href reader.onload = function (e) { // 转换完成,创建一个a标签用于下载 var a = document.createElement(‘a‘ ); a.download = ‘data.xlsx‘ ; a.href = e.target

JS中命名空间的几种管理方式

匿名 (未验证) 提交于 2019-12-03 00:41:02
原文: Namespacing in Javascript 说明:js语法结构松散,没有正式的命名空间结构或标准,所以管理命名空间的方法有很多,以下是其中常见的几种: 静态命名空间 1.直接指定 优点:稳妥。。。 缺点:写死了,属性Public 实现: var myApp = {} myApp . id = 0 ; myApp . next = function () { return myApp . id ++ ; } myApp . reset = function () { myApp . id = 0 ; } window . console && console . log ( myApp . next (), myApp . next (), myApp . reset (), myApp . next () ); // 0, 1, undefined, 0 // 使用this会让这个对象的维护性好一些,但增加了不规范使用的风险 2.对象字面量表示法 优点:一次性声明对象的所有方法,比1看起来简洁一点,但没什么用 缺点:同上 var myApp = { id : 0 , next : function () { return this . id ++ ; }, reset : function () { this . id = 0 ; } } window .