js

JS对象的概念、声明方式等及js中的继承与封装

送分小仙女□ 提交于 2020-02-14 23:33:27
对象的遍历 对象可以当做数组处理,使用for in var person={}; person.name="cyy"; person.age=25; person.infos=function(){ alert(this.name+" "+this.age); } for(var i in person){ console.log(i);//属性名或方法名 console.log(person[i]);//属性值或方法值 } 使用构造函数声明的对象,需要实例化之后再进行遍历 function Person(){ this.name="cyy"; this.age=25; } var p=new Person(); for(var i in p){ console.log(i+":"+p[i]); } 对象在内存中的分布 参考以下神图 封装:把对象的内部数据和操作细节进行隐藏 提供private关键词隐藏某些属性和方法,限制被封装的数据或者内容的访问,只对外提供一个对象的专门访问的接口 接口一般为调用方法 不过js没有提供这样的关键词,但可以通过闭包来实现 函数内部声明的变量,外部是访问不到的 function fn(){ var n=1; function fn2(){//特权方法 alert(++n); } return fn2; } fn()();//2 //封装

在Python中执行javascript

对着背影说爱祢 提交于 2020-02-14 14:35:33
在Python中执行javascript - 熊猫凶猛 - 博客园 在Python中执行javascript 在使用python抓取网页的过程中,有的时候需要执行某些简单的javascript,以获得自己需要的内容,例如执行js里面的document.write或者document.getElementById等。自己解析js代码显然有点吃力不讨好,因此最好能找到一些可以解析执行js的python库。 google之可以找到三个候选者,分别是微软的ScriptControl,v8的python移植 PyV8 ,还有SpiderMonkey的Python移植 Python-Spidermonkey 。其中ScriptControl只能在windows上运行,需要win32com库;PyV8能在windows和*nix上运行,但是需要装PyV8库;而SpiderMonkey是mozilla的js引擎在python上的移植,感觉已经不太活跃,因此没用。 微软的ScriptControl中对执行js最重要的方法就是addObject与eval,通过addObject,我们可以向js执行环境注入一个我们自定义的document对象,通过eval方法,我们可以执行一段js代码。注入自定义对象需要使用win32com.server.util.wrap方法,将一个python对象包装为COM对象

js内建函数reduce()

空扰寡人 提交于 2020-02-14 12:02:44
reduce函数 ,是ECMAScript5规范中出现的数组方法。在平时的工作中,相信大家使用的场景并不多,一般而言,可以通过reduce方法实现的逻辑都可以通过forEach方法来变相的实现,虽然不清楚浏览器的js引擎是如何在C++层面实现这两个方法,但是可以肯定的是reduce方法肯定也存在数组的遍历,在具体实现细节上是否针对数组项的操作和存储做了什么优化,则不得而知。 数组的reduce方法的应用 reduce方法有两个参数,第一个参数是一个callback,用于针对数组项的操作;第二个参数则是传入的初始值,这个初始值用于单个数组项的操作。需要注意的是,reduce方法返回值并不是数组,而是形如初始值的经过叠加处理后的操作。 reduce方法最常见的场景就是叠加。 var items = [10, 120, 1000]; // our reducer function var reducer = function add(sumSoFar, item) { return sumSoFar + item; }; // do the job var total = items.reduce(reducer, 0); console.log(total); // 1130 可以看出,reduce函数根据初始值0,不断的进行叠加,完成最简单的总和的实现。 前文中也提到

JS方法—完美的深度克隆

爷,独闯天下 提交于 2020-02-14 11:11:04
const getType = obj => Object.prototype.toString.call(obj); const isObject = (target) => (typeof target === 'object' || typeof target === 'function') && target !== null; const canTraverse = { '[object Map]': true, '[object Set]': true, '[object Array]': true, '[object Object]': true, '[object Arguments]': true, }; const mapTag = '[object Map]'; const setTag = '[object Set]'; const boolTag = '[object Boolean]'; const numberTag = '[object Number]'; const stringTag = '[object String]'; const symbolTag = '[object Symbol]'; const dateTag = '[object Date]'; const errorTag = '[object Error]'; const

原生js生成九宫格布局

 ̄綄美尐妖づ 提交于 2020-02-14 08:27:35
话不多说,直接上图 点击3列,他就变成3列布局 点击4列,变成四列 先来看html代码 < style > * { padding : 0 ; margin : 0 ; } #content { margin - top : 20 px ; position : relative ; } #content . box { width : 100 px ; height : 200 px ; margin : 5 px 0 ; border : 1 px solid red ; } < / style > < div id = "btns" > < button > 3 列 < / button > < button > 4 列 < / button > < button > 5 列 < / button > < / div > < div id = "content" > < div class = "box" > < / div > < div class = "box" > < / div > < div class = "box" > < / div > < div class = "box" > < / div > < div class = "box" > < / div > < div class = "box" > < / div > < div class =

JS的事件循环(Event Loop)

这一生的挚爱 提交于 2020-02-14 01:27:27
说明: Javascript是一门非阻塞单线程脚本语言; 浏览器是多进程的,系统给它的进程分配了资源(CPU、内存),打开 Chrome 会有一个主进程,每打开一个 Tab 页就有一个独立的进程; JavaScript的任务分为同步任务和异步任务,所有的同步任务都会进入到主执行栈(形成一个执行栈execution context stack),等待任务的回调结果进入一种任务队列(task queue),直到主执行栈的任务执行完毕才会执行任务队列的异步任务,异步任务会塞入主执行栈,异步任务执行完毕后会再次进入下一个循环,整个执行过程,我们称为事件循环过程。任务队列又分为macro-task(宏任务)与micro-task(微任务),在最新标准中,它们被分别称为task与jobs。 macro-task大概包括: script(整体代码) setTimeout setInterval setImmediate I/O UI render micro-task大概包括: process.nextTick Promise Async/Await(实际就是promise) MutationObserver(html5新特性) 整体执行流程图: async/await执行顺序注意: 输出:script start => async2 end => Promise => script end =

js模版引擎Mustache介绍

…衆ロ難τιáo~ 提交于 2020-02-14 00:04:13
Mustache通常被称为JavaScript模板的基础。另一个流行的解决方案Hanldebars实际上就是基于Mustache构建而成的。这并不意味着Mustache是一个不好的模板解决方案。 下面例举一例: Mustache.render("Hello, {{name}}", { name: "Jack" }); // 返回: Hello, Jack 一旦在页面中包含了Mustache,你就可以访问全局对象“Mustache”。你可使用其中最主要的方法“render”,它包含两个参数。首个参数是实际的模板,第二个参数则为需要传入的参数值。 上例中,你可以看见“{{name}}”。其中的“{{}}”实际上为Mustache的语法,表示一个占位符。当Mustache对其进行编译时,它将在传入的对像中寻找“name”属性,并用该属性的值(该例中为“Jack”)来代替“{{name}}”。 在这里,模板只为一个字符串,但如果你有一个更复杂的模板,该方法可能就不适用了。通常的解决方案是将模板放在“script”标签中: <script type="text/x-mustache" id="template"> <p>Hello, {{name}}</p> </script> 然后,我们可以访问的script标签的内容。例如,使用jQuery,它很容易实现: var temp = $("

javascript中如何使用js脚本模拟\"request\"获取url后参数值呢?

此生再无相见时 提交于 2020-02-13 23:52:26
转自:猫猫小屋--js获取url后参数信息 摘要: 下文讲述javascript中使用js代码获取url地址后面的参数值的方法分享,如下所示; 实现思路: 使用正则表达式对参数值进行匹配,获取参数后的相关值 例: 获取url:http://www.maomao365.com?name=test123&p=90 String.prototype.urlRequestForm=function(name){ var r=new RegExp('(^|\\?|&)'+name+'=([^&]*|$)'); var url=this.replace(/&/g,'&') var t=url.match(r); return t===null?null:unescape(t[2]); } var urlInfo= "http://www.maomao365.com?name=test123&p=90"; alert(urlInfo.urlRequestForm("name")); alert(urlInfo.urlRequestForm("p")); [ 来源: https://www.cnblogs.com/lairui1232000/p/12305608.html

webSocket 前端 js 加入 心跳机制 的基本写法

心已入冬 提交于 2020-02-13 18:38:21
1前言 websocket 一般 每隔 90 无操作则会自动断开 ,需要加入一个心跳机制 来防止 自断 2. 实验过程 (1)设定一个jsp 或html 文件都行 ,加入元素 (2)js 源码 ,点击查看 1 //避免重复链接 2 var lockReconnect = false; 3 //路径 4 var wsUrl = $("#wsUrl").val(); 5 console.log("路径" + wsUrl); 6 //webSocket对象 7 var ws; 8 //时间间隔 9 var tt; 10 11 if ("WebSocket" in window) { 12 console.log("支持WebSocket") 13 } else { 14 alert("该浏览器不支持WebSocket") 15 } 16 17 //创建ws连接 18 var createWebSocket = function (wsUrl) { 19 try { 20 //成功 21 ws = new WebSocket(wsUrl); 22 webSocketInit();//初始化webSocket连接函数 23 } catch (e) { 24 //失败 25 console.log('catch'); 26 //重连 27 //重连函数 28

JS实现冒泡排序

点点圈 提交于 2020-02-13 16:41:57
冒泡排序:   随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放在后面,简单来说就是交换它们的位置,如此反复的交换位置就可以得到排序的效果。 var arr = [3,1,4,2,5,21,6,15,63]; function sortA(arr){ for(var i=0;i<arr.length-1;i++){ for(var j=i+1;j<arr.length;j++){ //获取第一个值和后一个值比较 var cur = arr[i]; if(cur>arr[j]){ // 因为需要交换值,所以会把后一个值替换,我们要先保存下来 var index = arr[j]; // 交换值 arr[j] = cur; arr[i] = index; } } } return arr; }//因为一次循环只能交换一个最大的值,所以需要再套一层for循环。 来源: https://www.cnblogs.com/Magiccwl/p/7027591.html