-
;
任何对象都有一个__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日
-
;
基本结构 <link href="video-js.css" rel="stylesheet" type="text/css"/> <script src="videojs-ie8.min.js"></script> <script src="video.js"></script> <video id="my-video" class="video-js vjs-default-skin my_video_1-dimensions vjs-fluid vjs-controls-enabled vjs-workinghover vjs-has-started vjs-paused vjs-user-inactive vjs-big-play-centered" controls preload="auto" data-setup="{}"> <source src="url.mp4" type=’video/mp4′> </video> 切换源地址 va…
- videojs视频地址切换 2017年5月6日
-
;
方案一:flex .imgview_inner{height: 500px; display: -webkit-box; display: -webkit-flex; display: flex; -webkit-box-align: center; -webkit-align-items: center; align-items: center; -webkit-box-pack: center; -webkit-justify-content: center; justify-content: center; } <div class="imgview_inner"><img src="http://gameweb-img.qq.com/gad/20170317/phphgAjtN.1489739479.jpg"></div> 方案二:transform <div> <img src="img.png" alt=""> </div> div{ position:relative; } img{ position: absolute; left: 50%;top: 50%; transfor…
- flex实现图片垂直居中 2017年4月25日
-
;
格式: console.log("%c要显示的字符串","css样式"); 示例代码 console.clear(); console.log("%c ", "border-top: 4px dotted #dadada; font-size: 42px;"); console.log("%chttp://willless.com", "font-size: 42px; color: #fff; text-shadow: 0 1px 0 #eaeaea, 0 2px 0 #dadada, 0 3px 0 #bababa, 0 4px 0 #b0b0b0, 0 5px 0 #a0a0a0, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 10px 10px rgba(0,0,0,.2), 0 20px 20px rgba(0,0,0,.15);"); console.log("%c ", &qu…
- 对console.log的信息添加样式 2017年4月24日
-
;
前提: 1.当元素设置box-sizing:border-box; 2.同时设置了上下padding 问题: height等于line-height 就无法实现垂直居中 修正: line-height=height-padding*2
- box-sizing 影响垂直居中 2017年4月14日
-
;
slice() 把匹配元素集合缩减为指定的指数范围的子集。 <ul> <li>list item 1</li> <li>list item 2</li> <li>list item 3</li> <li>list item 4</li> <li>list item 5</li> </ul> $(‘li’).slice(2).css(‘background-color’, ‘red’);选中的是后面三个li元素。
- jquery slice用法 2017年3月29日
-
;
问题描述: 1,通过微信朋友圈链接点击进入网站,导航按钮点击失效。 2,跳转到其它页面再点击导航按钮功能却正常。 3,浏览器及微信web开发者工具内问题无法重现,一切功能正常。 4,css各种修改,位置调整及元素标签修改,问题依旧。 5,类似结构其它网站无此bug。 权宜之计: 通过把相关的js写到头部页面内,问题消失。 相关: 其它项目中也遇到在微信打开后一些奇怪的边框,通过调整z-index解决
- 微信朋友圈链接,导航按钮点击失效 2017年3月17日