js代码

js设计模式--策略模式

此生再无相见时 提交于 2019-12-10 18:21:49
概念 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 策略模式指的是定义一系列的算法,把它们一个个封装起来。将不变的部分和变化的部分隔开是每个设计模式的主题,策略模式也不例外,策略模式的目的就是将算法的使用与算法的实现分离开来。 一个基于策略模式的程序至少由两部分组成。第一个部分是一组策略类,策略类封装了具体 的算法,并负责具体的计算过程。 第二个部分是环境类Context,Context 接受客户的请求,随后 把请求委托给某一个策略类。要做到这点,说明 Context中要维持对某个策略对象的引用。 策略模式的实现并不复杂,关键是如何从策略模式的实现背后,找到封装变化、委托和多态性这些思想的价值。 场景 从定义上看,策略模式就是用来封装算法的。但如果把策略模式仅仅用来封装算法,未免有一点大材小用。在实际开发中,我们通常会把算法的含义扩散开来,使策略模式也可以用来封装 一系列的“业务规则”。只要这些业务规则指向的目标一致,并且可以被替换使用,我们就可以 用策略模式来封装它们。 优缺点 优点 策略模式利用组合、委托和多态等技术和思想,可以有效地避免多重条件选择语句。 策略模式提供了对开放—封闭原则的完美支持,将算法封装在独立的strategy中,使得它们易于切换,易于理解,易于扩展。 策略模式中的算法也可以复用在系统的其他地方

js去除空格12种方法

你离开我真会死。 提交于 2019-12-10 17:30:57
注:本文非本人原著;原文作者: 黄卉 《 js去除空格12种方法 》 //JS去除空格的方法目前共有12种: //实现1 String.prototype.trim = function() { return this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); } //看起来不怎么样, 动用了两次正则替换,实际速度非常惊人,主要得益于浏览器的内部优化。一个著名的例子字符串拼接,直接相加比用Array做成的StringBuffer 还快。base2类库使用这种实现。 // 实现2 String.prototype.trim = function() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); } //和实现1 很相似,但稍慢一点,主要原因是它最先是假设至少存在一个空白符。Prototype.js使用这种实现,过其名字为strip,因为 Prototype的方法都是力求与Ruby同名。 实现3 String.prototype.trim = function() { return this.substring(Math.max(this.search(/\S/), 0),this.search(/\S\s*$/) + 1); } //以截取方式取得空白部分

thymeleaf引入js找不到

假装没事ソ 提交于 2019-12-10 15:52:20
今天碰见一个奇怪的问题,springboot项目中thymeleaf模板找不到js,额,很低级,这我知道。 让我最纳闷的是,代码完全一样,并且反复进行了maven clean及rebuild,但我把这个项目放在两台不同的主机上运行,结果一台运行正常,一台在登录界面的控制台报错。错误信息如图: Unexpected token '<' 指向的是login.html的第一行<!DOCTYPE html> 然后就是layui未被定义,于是找和layui相关的引入文件。 自我感觉没有任何问题,我会这样想是因为我在另外一台主机上运行,它很健康,没有任何问题。 但当我在登录界面ctrl+U查看代码并试图戳进layui.js时,却根本访问不到。 于是重新检查这个js路径,但确实没问题。又检查了一下继承自 WebMvcConfigurer 的配置类: 感觉没毛病。 最后我 /lib/layui/layui.js 文件路径变更为 /static/js/layui/layui.js,我天,成功了。 但为啥,我在另外一台主机上运行却并没有问题,运行环境并没有太大差异,很费解。   此   处   留   白 来源: https://www.cnblogs.com/xfc-exclave/p/12017037.html

利用原生JS实现数组原型方法

自古美人都是妖i 提交于 2019-12-10 15:48:14
利用原生JS实现数组原型方法 1. 判断对象数据类型 2. 利用原生JS实现map方法 3. 利用原生JS实现filter方法 4. 利用原生JS实现some方法 1. 判断对象数据类型 初始代码: const isType = function ( type ) { return function ( t ) { return `[object ${ type } ]` === Object . prototype . toString . call ( t ) } } const isArray = isType ( 'Array' ) console . log ( isArray ( [ ] ) ) 简化后: const isType = type => t => `[object ${ type } ]` === Object . prototype . toString . call ( t ) const isArray = isType ( 'Array' ) // 此时 isArray 为 // isArray = t => `[object Array]` === Object.prototype.toString.call(t) 原理:   Object 的原型上有 toString 方法,可以返回对象的数据类型;   例:传入 [1, 2, 3] 调用后得

.net之大文件断点续传

浪子不回头ぞ 提交于 2019-12-10 15:47:09
HTML 部分 <% @ Page Language ="C#" AutoEventWireup ="true" CodeBehind ="index.aspx.cs" Inherits ="up6.index" %> <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> < html xmlns ="http://www.w3.org/1999/xhtml" > < head > < meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" /> < title > up6- 多标签演示页面 </ title > < link href ="js/up6.css" type ="text/css" rel ="Stylesheet" charset ="gb2312"/> < script type ="text/javascript" src ="js/jquery-1.4.min.js"></ script > < script type ="text/javascript" src ="js/json2

js回调封装

孤人 提交于 2019-12-10 15:37:00
一个简单的封装,js回调封装 // 一个简单的封装 function want() { console.log('这是你想要执行的代码'); } function fn(want) { console.log('这里表示执行了一大堆各种代码'); // 其他代码执行完毕,最后执行回调函数 want && want(); } fn(want); 来源: https://www.cnblogs.com/wn798/p/12016858.html

js的一些总结

北城余情 提交于 2019-12-10 15:18:17
最近突然发现之前写得好多代码都是一坨屎啊== 比如在数组中我使用(for .. in)去遍历,才发现自己的一些错误,在vue页面中使用了json.parse的类似操作。。 以后要好好的学习啊,不能再犯一些低级小错误了。 一、数组常见的15种操作 1.遍历数组 (1)方法一: for...of循环 const numbers = [1, 3, 5]; for (const num of numbers) { console.log(num); } // 1 // 3 // 5 可以使用 break 语句可以停止遍历 (2)方法二: for循环 const numbers = [1, 3, 5]; for (let i; i < numbers.length; i++) { console.log(numbers); } // 1 // 3 // 5 可以随时使用 break 语句停止遍历。 (3)方法三: array.forEach()方法 array.forEach(callback) 方法通过在每个数组项上调用 callback 函数来遍历数组项。 在每次遍历中,都使用以下参数调用 callback(item [, index [, array]]) :当前遍历项,当前遍历索引和数组本身。 const numbers = [1, 3, 5]; numbers.forEach

8 个问题看你是否真的懂 JS

北慕城南 提交于 2019-12-10 11:22:52
JavaScript 是一种有趣的语言,我们都喜欢它,因为它的性质。浏览器是JavaScript的主要运行的地方,两者在我们的服务中协同工作。JS有一些概念,人们往往会对它掉以轻心,有时可能会忽略不计。原型、闭包和事件循环等概念仍然是大多数JS开发人员绕道而行的晦涩领域之一。正如我们所知,无知是一件危险的事情,它可能会导致错误。 接下来,来看看几个问题,你也可以试试想想,然后作答。 问题1:浏览器控制台上会打印什么? var a = 10; function foo() { console.log(a); // ?? var a = 20; } foo(); 问题2:如果我们使用 let 或 const 代替 var,输出是否相同 var a = 10; function foo() { console.log(a); // ?? let a = 20; } foo(); 问题3:"newArray"中有哪些元素? var array = []; for(var i = 0; i <3; i++) { array.push(() => i); } var newArray = array.map(el => el()); console.log(newArray); // ?? 问题4:如果我们在浏览器控制台中运行'foo'函数,是否会导致堆栈溢出错误? function foo(

JS系列:js数据类型

孤街浪徒 提交于 2019-12-10 09:19:47
ctrl+B加粗 数据类型: 1.number数字类型 NaN:not a number 不是一个数 ,但它是数字类型 isNaN:检测当前值是否不是有效数字,返回true代表不是有效数字,false是有效数字 //=>语法: isNaN([value]) var num = 12 ; isNaN ( num ) ; //=>检测num变量存储的值是否为非有效数字 返回12 false是有效数字 isNaN ( '前端' ) => true ; isNaN ( true ) => false ; isNaN ( false ) => false ; isNaN ( null ) => false ; isNaN ( underfined ) => true ; isNaN ( { age : 9 } ) => true ; isNaN ( [ 12 , 23 ] ) => true ; isNaN ( [ 12 ] ) => false ; isNaN ( /^$/ ) => true ; isNaN ( function ( ) { } ) => true ; 重要知识点:isNaN检测的机制: 1. 首先验证当前的检测的值是否为数字类型,如果不是浏览器会默认转化为数字类型 把非数字类型的值转化为数字 - 把其他基本类型转为数字:直接用number方法 [ 字符串转数字 ]

phpwind网站后台如何添加js广告代码

﹥>﹥吖頭↗ 提交于 2019-12-10 09:01:40
你如果使用phpwind建站,并且你的网站流量已经达到一定程度,你可以申请加入各种广告联盟,并从广告联盟获得广告,比较常见的网站广告有CPC、CPA、CPV、CPM,可根据你网站的特点选择适合你网站的广告,以求获得更高的收益,获得广告代码后,我们如何通过后台将其发布到自己的网站上?我们通过phpwind的后台来添加广告代码。 百度经验:jingyan.baidu.com 方法/步骤 1从浏览器中打开网站后台管理主页面,为保证安全登录,建议使用安全的浏览器进行登录; 进入后台管理主页后,输入管理员的用户及密码进行登录; 在常用功能项下打开运营工具——广告管理; 进入广告管理后,首先你可以对广告位进行管理,广告位即你的广告显示在网站的位置;可新增广告位或对现有的广告位进行编辑; 点击进入广告管理,在些处添加广告,点击广告管理旁的添加广告按钮,进行广告的添加; 广告的表现方式可是文字、图片、代码、flash,在这里我们选择代码,将从广告联盟那里获得的广告代码粘贴到广告代码区,设置一个广告描述以便于以后的管理,选择相应的广告位; 显示顺序保持默认的不变(0),对广告显示的有效时间进行设定,并进行横向广告位的选择,设置完成后就可以提交,然后就可以在对应页面看到展示的广告。 要图片上传,可以 来源: oschina 链接: https://my.oschina.net/u/183102