;

创建一个具有指定原型且可选择性地包含指定属性的对象。 Object.create(prototype, descriptors)

javascript中的继承 2018年10月17日
;

一、原型 ①所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通的对象 ②所有函数都有一个prototype(原型)属性,属性值是一个普通的对象 ③所有引用类型的__proto__属性指向它构造函数的prototype var a = [1,2,3]; a.__proto__ === Array.prototype; // true 二、原型链 当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链。 举例,有以下代码 function Parent(month){ this.month = month; } var child = new Parent(‘Ann’); console.log(child.month); // Ann console.log(child.father); // undefined 在child中查找某个属性时,会执行下面步骤: 访问链路为: ①一直往上层查找,直到到null还没有找到,则返回undefined ②Object.prototype.__proto_…

什么是原型和原型链? 2018年10月16日
;

<meta name="theme-color" content="#42b983" /> 参考链接:http://www.webhek.com/post/how-to-change-the-color-of-header-bar-and-address-bar-use-theme-color.html

theme-color设置浏览器地址颜色 2018年9月9日
;

解决办法: 1、Firefox的用户请在浏览器的地址栏输入“about:config”,回车 2、在过滤器(filter)中搜索“security.fileuri.strict_origin_policy” 3、将security.fileuri.strict_origin_policy设置为false 4、关闭目前开启的所有Firefox窗口,然后重新启动Firefox。 参考链接:https://blog.csdn.net/senssic/article/details/48436365

firefox无法通过ajax读取本地json文件 2018年9月5日
;

1.基本用法 runAsync1() .then(function(data){ console.log(data); return runAsync2(); }) .then(function(data){ console.log(data); return runAsync3(); }) .then(function(data){ console.log(data); }); function runAsync1(){ var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log(‘异步任务1执行完成’); resolve(‘随便什么数据1’); }, 1000); }); return p; } function runAsync2(){ var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log(‘异步任务2执行完成’); resolve(‘随便什么数据2’); }, 2000); }); return p; } function runAsync3(){ var p = new Promis…

Promise用例 2018年8月24日
;

原理:如果成功会触发window的blur事件 (function($)) { $(‘a[href^=mailto]’).each(function() { var href = $(this).attr(‘href’); $(this).click(function() { var t; var self = $(this); $(window).blur(function() { // The browser apparently responded, so stop the timeout. clearTimeout(t); }); t = setTimeout(function() { // The browser did not respond after 500ms, so open an alternative URL. document.location.href = ‘…’; }, 500); }); }); })(jQuery); 参考链接:https://www.uncinc.nl/en/articles/dealing-mailto-links-if-no-mail-client-available

检测mailto是否成功打开了客户端 2018年8月2日
;

任何对象都有一个__proto__属性 任何方法都有一个prototype属性,prototype也是一个对象 ,所以其中也有一个___proto__ 大多数浏览器的ES5实现之中,每一个对象都有__proto__属性,这个属性就是一个指针,指向对应的构造函数的prototype属性 var obj1={}; console.log(obj1.__proto__===Object.prototype); //输出true Object.prototype.__proto__ //null var obj1={}; console.log(obj1.__proto__.__proto__===null); //true 当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己的__proto__,于是就这样 一直找下去,也就是我们平时所说的原型链的概念。 __proto__可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。 funcition这个特殊的对象,除了和其他对象一样有上述_proto_属性之外,还有自己特有的属性——原型属性(prototype),这个属性是一个指针,指向一个对象,这…

prototype和__proto__ 2018年7月15日
;

看图之前我们首先来了解几个对象原型的基本知识: 例子: function Fn() {}// Fn为构造函数 var f1 = new Fn();//f1是Fn构造函数创建出来的对象 构造函数的prototype属性值就是对象原型。(Fn.prototype就是对象的原型) 构造函数的prototype属性值的类型就是对象 typeof Fn.prototype===object. 对象原型中的constructor属性指向构造函数 (Fn.prototype.constructor===Fn) 对象的__proto__属性值就是对象的原型。(f1.__proto__就是对象原型) Fn.prototype===f1.__proto__ 其实它们两个就是同一个对象—对象的原型。 所有Fn.prototype.__proto__===Object.prototype typeof Object.prototype ===object。 Object.prototype.__proto__===null。 我讨论原型就是指的对象与原型对象之间的关系。所以原型链也称之为对象链。 有了以上的基础知识,下面的原型链图你就可以看明白了。 所以对象f1的原型链:f1.__proto__—->Fn.prototype.__proto_…

一张图瞬间让你明白原型链结构 2018年7月12日
;

简介 铁路图(railroad diagram),又叫语法图(syntax diagrams),是一种表示形式语法的方式,是巴科斯范式和扩展巴科斯范式的图形化表示。 基本规则 1.从左边界开始,沿着轨道到右边界。 2.沿途,你在圆框中遇到的是字面量,在方块中遇到的是规则或描述。 3.任何沿着轨道能走通的序列都是合法的。 4.任何不能沿着轨道走通的序列都是非法的。 5.末端只有一个竖条的铁路图,表示允许在任意一对符号中插入空白。而在末端有两个竖条的铁路图则不允许。 示例 以javascript为例,声明变量的语法。 则语法如下: 1、空。 2、从name和=之间绕行。 var name; 3、中间横向语句。 var name = expression; 4、在expression和;之间循环。 var name, name,…,name; var name = expression, name = expression,…, name = expression; 5、在分号之后循环。 var name = expression; var name = expression; … 注:圆角向内表示循环,向外则不循环。或者将左下弧理解为出口,右下弧理解为入口。 来源:https://blog.csdn.net/u013961139/ar…

铁路图 2018年4月2日
;

对象属性是由名字、值和一组特性构成的。 在ES5中,属性值可以用一个或两个方法替代,这两个方法就是getter和setter。 由getter和setter定义的属性称做 “访问器属性”,它不同于 “数据属性”,数据属性就是一个简单的值。 当程序查询访问器属性的值时,JS调用getter方法(无参数)。 这个方法的返回值就是属性存取表达式的值。 当程序设置一个访问器属性的值时,JS调用setter方法,将赋值表达式右侧的值当做参数传入setter。从某种意义上讲,这个方法负责 “设置”属性值。可以忽略setter方法的返回值。 和数据属性不同,访问器属性不具有可写性。 如果属性同时具有getter和setter,那么它是一个读/写属性。 如果它只有getter方法,那么它是一个只读属性。 如果它只有setter方法,那么它是一个只写属性(数据属性中有一些例外),读取只写属性总是返回undefined. var obj={ a:1, b:2, get a(){ alert(666); } }; console.log(obj.a); https://www.cnblogs.com/hanxuming/p/5793489.html

setter与gettet 2018年4月1日
;

在js中,所有的函数被调用的时候都会默认传入两个参数,一个是this,还有一个是arguments。 在默认情况下this都是指当前的调用函数的对象。 但是有时候我们需要改变this的指向,也就是说使函数可以被其他对象来调用,那么我们应该怎样做呢?这时候我们就可以使用call,apply和bind方法了 call和apply可以用来重新定义函数的执行环境,也就是this的指向。 call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的。 换句话说,就是为了改变函数体内部 this 的指向。 因为 JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。 用例: function changeStyle(attr, value) { this.style[attr] = value; } var box = document.getElementById(‘box’); window.changeStyle.call(box, "height", "200px"); 备注:changeStyle函数将被box对象调用,this指向了box对象,如果不用call的话,程序报错,因为window对象中没有style属性。

apply,call,bind的应用场景 2018年4月1日
;

示例数据 const animals = [ { "name": "cat", "size": "small", "weight": 5 }, { "name": "dog", "size": "small", "weight": 10 }, { "name": "lion", "size": "medium", "weight": 150 }, { "name": "elephant", "size": "big", "weight": 5000 } ] map() 定义和用法: map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。 map() 方法按照原始数组元素顺序依次处理元素。 语法: array.map(function(currentValue,index,arr), thisValue) 示例:获取所有动物的n…

map(),filter(),reduce(),foreach()比较 2018年3月3日
;

var o1 = { a: 1 }; var o2 = { b: 2 }; var o3 = { c: 3 }; var obj = Object.assign(o1, o2, o3);

Javascript 对象合并 2018年2月9日
;

bxslider轮播插件 pc端正常,但是切换到移动端后,每次轮播切换时候在控制台会有此提示(控制台报错,但不影响功能) Uncaught DOMException: Failed to execute ‘releasePointerCapture’ on ‘Element’: InvalidPointerId 查看官网demo此报错同样存在 1.查找代码 touchPoints = (typeof orig.changedTouches !== ‘undefined’) ? orig.changedTouches : [orig]; 2.在后面添加如下代码 var chromePointerEvents = typeof PointerEvent === ‘function’; if (chromePointerEvents) { if (orig.pointerId === undefined) { return; } }

Failed to execute releasePointerCapture on Element: InvalidPointerId 2018年1月5日

步骤1. 手机通过USB连接到电脑 步骤2. 手机设置 开发者选项->USB调试 步骤3. 保证电脑可以访问google.com 步骤4. 进入电脑端调试页面 chrome://inspect/#devices 步骤5. 手机用chrome打开需要调试的网站 步骤6. 电脑端会显示手机上打开的所有页面,点击inspect即可 备注: 如果页面一直显示加载白屏尝试以下操作 chrome://appcache-internals/# 清除一下这里的缓存

chrome远程调试 2017年12月31日
;

(function() { var h = {} , mt = {} , c = { id: "9ee4bb9d5bb1d41420031974fceab60f", dm: ["willless.com"], js: "tongji.baidu.com/hm-web/js/", etrk: [], icon: ”, ctrk: false, align: -1, nv: -1, vdur: 1800000, age: 31536000000, rec: 0, rp: [], trust: 0, vcard: 0, qiao: 0, lxb: 0, conv: 0, med: 0, cvcc: ”, cvcf: [], apps: ” }; var q = void 0 , r = !0 , t = null , u = !1; mt.cookie = {}; mt.cookie.set = function(a, b, d) { var f; d.H && (f = new Date, f.setTime(f.getTime() + d.H)); document.cookie = a + "=" + b + (d.domain ? &quo…

百度统计,源代码解读 2017年12月11日
;

//形如这种,应该叫做unix时间戳, 1363737600000 //形如这种,我们称之为ISO-8601格式的时间 2017-09-28T16:00:00Z 一般跨时区的应用,数据库中都是存储这两种格式化的时间,前端根据自己所在的时区展示对用的本地时间 把unix时间戳格式化为本地时间,推荐使用moment.js moment.unix(1318781876).format(‘YYYY-MM-DD’) 把一个ISO时间根据时区转换,推荐使用使用moment.js //demo var date = ‘2017-09-28T16:00:00Z’; var timezone = ‘Asia/Shanghai’; moment(date).tz(timezone).format(‘YYYY-MM-DD hh:mm:ss’); 如果是在微信小程序中使用,你需要先去moment官方下载moment-timezone-with-data.js这个文件到你的小程序应用中 const moment = require("./moment-timezone-with-data"); var date = ‘2017-09-28T16:00:00Z’; var timezone = ‘"Asia/Shanghai’; momen…

跨时区时间转换 2017年11月28日
;

1.一维数组排序 timeList=[‘2017-10-05′,’2017-10-01′,’2017-10-03′,’2017-10-02′,’2017-10-09′]; timeList.sort(); console.log(timeList); 2.对象数组的排序 sort方法接收一个函数作为参数,这里嵌套一层函数用来接收对象属性名,其他部分代码与正常使用sort方法相同 var arr = [ {name:’zopp’,age:0}, {name:’gpp’,age:18}, {name:’yjj’,age:8} ]; function compare(property){ return function(a,b){ var value1 = a[property]; var value2 = b[property]; return value1 – value2; } } console.log(arr.sort(compare(‘age’))) 当对日期排序就需要处理一下 var arr = [ {name:’zopp’,age:’2017-11-5′}, {name:’gpp’,age:’2017-11-9′}, {name:’yjj’,age:’2017-11-1′} ]; function compare(property)…

js中sort方法根据数组中对象的某一个属性值进行排序 2017年11月20日
;

toUTCString() toISOString() http://www.jianshu.com/p/415f8c276388 https://segmentfault.com/a/1190000003710954?mType=Group https://segmentfault.com/a/1190000007581722 http://www.w3school.com.cn/jsref/jsref_obj_date.asp

时间相关函数 2017年11月1日
;

array.map(callback, [thisArg]) map 方法会给原数组中的每个元素都按顺序调用一次 callback 函数。callback 每次执行后的返回值组合起来形成一个新数组。如果 thisArg 参数有值,则每次 callback 函数被调用的时候,this 都会指向 thisArg 参数上的这个对象。如果省略了 thisArg 参数,或者赋值为 null 或 undefined,则 this 指向全局对象 。 var numbers = [1, 4, 9]; var roots = numbers.map(Math.sqrt); /* roots的值为[1, 2, 3], numbers的值仍为[1, 4, 9]*/

map函数 2017年10月29日
;

JSON.parse() 方法用于将一个 JSON 字符串转换为对象。 语法:JSON.parse(text[, reviver]) 参数说明: text:必需, 一个有效的 JSON 字符串。 reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。 返回值: 返回给定 JSON 字符串转换后的对象。 JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串。 语法:JSON.stringify(value[, replacer[, space]]) 参数说明: value: 必需, 一个有效的 JSON 字符串。 replacer: 可选。用于转换结果的函数或数组。 如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:””。 如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。 space: 可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格…

JSON.parse与JSON.stringify及toString 2017年10月27日
;

// Converts canvas to an image function convertCanvasToImage(canvas) { var image = new Image(); image.src = canvas.toDataURL("image/png"); return image; } // Converts image to canvas; returns new canvas element function convertImageToCanvas(image) { var canvas = document.createElement("canvas"); canvas.width = image.width; canvas.height = image.height; canvas.getContext("2d").drawImage(image, 0, 0); return canvas; }

canvas与image互相转换 2017年10月20日
;

步骤一: 地址栏输入,chrome://version,“个人资料路径”即为本地路径 步骤二: 复制地址在文件夹内打开,进入到“Extensions”目录 如何知道插件对应的目录 步骤三: 地址栏输入,chrome://extensions/ 此处ID即为对应的目录名

如何查看chrome插件源文件 2017年7月16日
;

1.对象属性遍历 var pricelist={1: "35", 2: "70", 3: "105", 4: "140", 5: "175", 6: "210", 7: "245", 8: "280", 9: "315", 10: "350"}; for (var key in pricelist) { console.log(key+"="+pricelist[key]) } for (attr in window) { console.log(attr); } //枚举window对象的所有属性 2.数组遍历 方式一: var pricelist = [35,70,105,140,175,210,245,280,315,350]; for (var key in pricelist) { console.log(pricelist[key]) } 方式二: var pricelist = [35,70,105,140,175,210,245,280,315,350]; for (var i=0;i<pricelist…

对象及数组属性遍历 2017年5月8日