lizhenqiu blog
最新评论流与站内评论搜索
Comment Stream
最新评论聚合
共 2894 条评论
Current Page
链接聚合
链接标签分页
Latest
评论流
第 47 / 145 页
当前展示 921 - 940 条,共 2894 条评论
Windows环境安装PHP redis扩展
windows php_redis.dll 官方下载地址 php5x php7x
理解JavaScript构造函数
认识js函数对象(Function Object)
理解JavaScript构造函数
js深入理解构造函数和原型对象
1.在典型的oop的语言中,如java,都存在类的概念,类就是对象的模板,对象就是类的实例。但在js中不存在类的概念,js不是基于类,而是通过构造函数(constructor)和原型链(propotype chains)实现的。但在ES6中引入了类(class)这个概念,作为对象的模板,新的class写法知识让原型对象的写法更加清晰,这里不重点谈这个
2.首先我们来详细了解下什么是构造器
构造函数的特点:
a:构造函数的首字母必须大写,用来区分于普通函数
b:内部使用的this对象,来指向即将要生成的实例对象
c:使用New来生成实例对象
eg1:
构造函数的缺点:
所有的实例对象都可以继承构造器函数中的属性和方法。但是,同一个对象实例之间,无法共享属性
解决思路:
a:所有实例都会通过原型链引用到prototype
b:prototype相当于特定类型所有实例都可以访问到的一个公共容器
c:那么我们就将重复的东西放到公共容易就好了
eg2:
一个构造函数Person生成了两个对象实例girl和boy,并且有两个属性和一个方法。但是sayHello方法是不一样的。如上图(图画得很丑)。也就是说当New一个实例对象的时候,都会去创建一个sayHello方法,这就浪费了内存资源,因为sayHello方法使一样的行为的,完全可以被两个实例对象共享。
所以,缺点就是:同一个构造函数的对象实例之间无法共享属性和方法。
为了解决构造函数的这个缺点,js提供了prototype属相来解决该问题。
propotype属性的作用
js中每个数据类型都是对象,除了null 和 undefined(这个可以参考另一篇将null 和 undefined的博客),而每个对象都是继承自一个原型对象,只有null除外,它没有自己的原型对象,最终的Object的原型为null
eg3:
constructor属性的作用
a:分辨原型对象到底是哪个构造函数
b:从实例新建另一个实例
c:由于constructor属性是一种原型对象和构造函数的关系,所以在修改原型对象的时候,一定 要注意construtor的指向问题,避免instanceof失真,关于这一点,会在继承中讲到。
3.了解了构造器,我们来看下原型prototype
JS中万物都是对象,但是对象也分为:普通对象和函数对象,也就是Object 和 Function.
那么怎么区分普通对象和函数对象呢? ---凡是通过New Function()创建的对象都是函数对象,其他的都是普通对象.
需要注意的是:普通对象没有propotype(prototype即是属性也是对象),但是有__proto__属性。
js创建对象的时候都有一个__propo__内置属性,用于指向创建它的函数对象的原型对象prototype。
我们还是来根据eg3的代码来分析原型链
console.log(girl.__proto__ === Person.protype);//true
console.log(Persion.propotype.__proto__ === Object.propotype);//true
console.log(Object.porpotype.__proto__); //null
通过__proto__串起来直到Object.propotype.__proto__为null的链叫做原型链(矩形表示函数对象,椭圆形表示普通对象)
也许看到这个图会有几个疑问
a:为什么Object.__proto__指向Function.prototype?
Object是函数对象,是通过new Function()创建的,所以...
b:Function.__proto__ === Function.prototype //true
Function也是对象函数,通过new Function()创建,所以...
理解box-sizing布局
后者可以这么说
content-box:标准盒模型,CSS定义的宽高只包含content的宽高
border-box:IE盒模型,CSS定义的宽高包括了content,padding和border
为什么只是 border和padding,给设置margin为什么还是会溢出呢?
理解JavaScript构造函数
好像name是FF的关键字,在IE下可以,但是在FF下换个名字也可以
理解JavaScript构造函数
当我们试图访问实例对象的属性或方法时,如果该属性或方法在此实例对象上,那么就去原型链上查找,如果原型链上没有,会再向上一级原型链上查找。
这是基于原型链实现继承中对属性和方法的访问,例子如下:
但当我们修改实例对象的属性和方法时,如果此对象的该属性或方法不存在,那么会在该对象上创建该属性,而不是修改原型链上的属性,例子如下:
原因:
根据ECMA262-3 ,当对对象O(所有javascript对象和部分宿主对象)的属性P设置值时会调用内置的[[Put]]方法:
8.6.22[[Put]]方法描述:
1.以名字 P 调用 O 的[[CanPut]]方法。
2.如果 Result(1) 为 false,返回。
3.如果 O 没有以 P 为 名的属性,转到步骤6.
4.将该属性的值设为 V 。不改变该属性的特征。
5.返回。
6.创建以 P 为名属性,将其值设为 V , 并给予它空特征。
7.返回。
不过,值得注意的是,假如 O 是一个 Array 对象,关于[[Put]]方法有更多详细叙述(15.4.5.1)。
8.6.2.3 [[CanPut]]方法执行步骤:
1.如果 O 没有以 P 命 名的属性,转到步骤4.
2.如果该属性有 ReadOnly 特征,返回 false。
3.返回 true。
4.如果 O 的[[Prototype]]为 null,返回 true。
5.以属性名 P 调用 O 的[[Prototype]]的[[CanPut]]方法。
6.返回 Result(5)。
ECMA的解释印证了我们前面例子的现象。
JavaScript简写技巧
语句用逗号可以分开了,就是不能出现return
语句块是没有返回值的。。。另外分号表示语句结束
碰到这种情况你可以用小括号和逗号
{} 花括号是创建对象字面量的符号,而对象是由若干个 "名/值"对组成的集合 对象的属性名与属性值之间由冒号连接 所以这里JS认为你要创建一个对象,可对象里又找不到冒号
这玩意和大一学的C#的{}表示语句段的意思不一样,看来
JavaScript简写技巧
最后一点 ~~ 刚知道,那parseInt也可以用 ~~ 了。
就是if的时候要注意,比如
要考虑variable1为0的时候,因为当0 的时候 ,上下两个语句是不一样的结果。
常用html、demo代码
两个正方体旋转logo特效动画
立方体魔方中里面包含小正方体方块图标
@意见反馈/技术支持/伊网/安企网
You keep pressing until it hurts. Then you know where to look。
PHP分割txt纯文本小说格式章节
火速标题截取后两个字中文汉字红色
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
CSS3可控旋转Js播放音乐按钮
js将div中滚动条滚动到指定位置
Js代码:
Html代码:
CSS3可控旋转Js播放音乐按钮
html5 audio标签播放完成后事件
常用html、demo代码
jquery each判断是否执行到最后一个元素
weiphp微信第三方开发框架新增插件后列表页新增页面空白解决办法
weiphp onethinkphp 多个编辑器bug修复
问题是由于框架没有考虑到一个页面多个uditor实例,所以框架中的写法是读取模型字段的时候,有编辑器类型的字段就引入ueditor的js文件,并创建1个imageEditor对象变量。但是这样有多个编辑器的情况下,ueditor初始化js文件和imageEditor肯定是会相互覆盖的。
我的解决方法是重写框架的加载方法,用静态变量判断是否已经加载了ueditor.all.js这个文件,如果加载了不重复加载。另外编辑器实例的创建使用!function(){}()风格,把imageEditor这个变量封装到函数中作为局部变量,千万不能放在全局中。
js一些算法小技巧
可以使用亦或
int a = 2;
int b = 3;
a = a^b;
b = a^b;
a= a^b;
你这种如果是两个对象交换就不行了把
#1只是基本类型交换 基本类型大数据的交换节省个了很多性能
js一些算法小技巧
for(i in json)
最好写成 for(var i in json) 否则i就变成全局的了, 会污染整个window
利用CSS属性环绕布局Shapes绘制各个形状图形形状文本文字环绕特效
为 iPhoneX 而生的小效果
就是兼容不好,只有webkit内核支持。
利用CSS属性环绕布局Shapes绘制各个形状图形形状文本文字环绕特效
让输入框获取焦点 JS
div等标签获取焦点绑定keypress等事件