JavaScript技巧&写法
JavaScript技巧篇:
1》状态机
var state = function () {
this.count = 0;
this.fun = null;
this.nowcount = 0; };
state.prototype = {
load: function (count,fun) {
this.count = count;
this.fun = fun;
this.nowcount=0;
},
trigger: function () {
this.nowcount++;
if (this.nowcount >= this.count){
this.fun();
}
}
}; //--------------
function method1() {
s.trigger();
}
function method2() {
s.trigger();
}
var s = new state();
s.load(2, function () {
console.log('执行完毕');
});
setTimeout(method1, 1000);
setTimeout(method2, 1000);
状态机一般用在多个任务同时进行的情况下,任务执行到某个阶段执行某个函数!
场景:同时请求多个异步并发执行(ajax,nodejs的io),并处理结果集合,以上的写法最简单,但却不够优美,
这是我发现的至今为止最好的一js异步流程文章: http://www.docin.com/p-687111809.html~
2》setTimeout 的特殊应用
var hander=setTimeout(function () { },100);
clearTimeout(hander);
场景1》:按钮三次快速点击才触发事件
var num = 0;
var hander = 0;
function btnClick() {
if (hander != 0){
clearTimeout(hander);
hander = 0;
}
num++;
if (num >= 3) {
Run();
num = 0;
clearTimeout(hander);
hander = 0;
}
hander = setTimeout(function () {
num = 0;
}, 300);
}
function Run() {
console.log('Run');
}
<input type="button" onclick="btnClick()" value="快速点击三次触发" />
场景2》:快速多次点击只触发最后一次
var hander = 0;
function btnClick() {
if (hander != 0) {
clearTimeout(hander);
hander = 0;
}
hander = setTimeout(function () {
Run();
}, 300);
}
function Run() {
console.log('Run');
}
<input type="button" onclick="btnClick()" value="快速点击只触发最后一次" />
其他(长期更新)....
JavaScript写法:
《. & []》
var obj = new Object();
obj.add = function (a, b) {
return a + b;
}
console.log(obj.add(1, 2)); var obj2 = new Object();
obj2['add'] = function (a, b) {
return a + b;
}
console.log(obj2.add(1, 2));
《prototype》 最常见
var obj = function (name) {
this.name = name;
}
obj.prototype.say = function () {
console.log(this.name);
}
obj.prototype.add = function (a, b) {
return a + n;
}
var o = new obj('fuck');
o.say(); var obj = function (age) {
this.age = age; };
obj.prototype = {
add: function (a, b) {
return this.age;
},
say: function () {
console.log('@');
}
}
var o = new obj(23333);
console.log(o.add());
《运行创建对象》 简单闭包
var obj2 = function () {
var _name = '123';
function _add(a, b) {
return a + b+_name;
}
return {
add: _add,
name: _name
};
}();
console.log(obj2.add(1,3));
Object.create Object.defineProperty
var obj = function () {
this.add = function () {
console.log('add')
}
}
var outo = new obj();
var o = Object.create(outo, {
sub: {
value: function () {
console.log('sub')
}
}
});
o.add();
o.sub();
var obj = function () {
this.add = function () {
console.log('add')
}
}
var o = new obj();
Object.defineProperty(o, {
"sub": {
value: function () {
console.log('sub')
},
writeable: false
}
});
o.sub();
__proto__
var obj = function () {};
obj.prototype = {
add: function () {
console.log('add');
},
sub: function () {
console.log('sub');
}
}; var o = {};//new Object();
o.__proto__ = obj.prototype; o.add();
o.sub();
var o = {};//new Object();
o.__proto__ = {
add: function () {
console.log('add');
},
sub: function () {
console.log('sub');
}
};
o.__proto__.go = function () {
console.log('go');
} o.add();
o.sub();
o.go();
call bind
var obj = new Object();
obj.name = 'myname';
function add() {
console.log(this.name+':add');
}
add.call(obj); var obj = new Object();
obj.name = 'myname';
function add() {
console.log(this.name + ':add');
}
var newadd = add.bind(obj);
newadd();
写在最后:
prototype》function的内置属性
__proto__》任意对象的内置属性
add.call(obj)》在obj对象域下执行add apply同是
add.bind(obj)》给add绑定一个obj对象执行域,obj对象并不会得到add,bind返回一个绑定执行域obj的函数add
类.add,为静态,不会被实例化
类.prototype.add,是修改原型,可以实例化 prototype 等价 this
对象.add 是为对象添加 add ,仅对象使用
对象.__proto__,是对象的所有属性集,
表达式:对象.__proto__= 某类.prototype 为原始属性完全继承,对象.__proto__=另一对象.__proto__ 为对象简单深层复制
表达式:对象.__proto__.add 为对象添加add或修改add,同理:对象.__proto__.add()为执行
同理:表达式:for (var i in o.__proto__) {console.log(o.__proto__[i])}为遍历对象属性
表达式:for (var i in 类.prototype ) {}为遍历类属性
JavaScript技巧&写法的更多相关文章
- Javascript技巧
Javascript数组转换为CSV格式 首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件.则我们可以使用如下的小技巧,代码如下: ...
- (译文)12个简单(但强大)的JavaScript技巧(二)
原文链接: 12 Simple (Yet Powerful) JavaScript Tips 其他链接: (译文)12个简单(但强大)的JavaScript技巧(一) 强大的立即调用函数表达式 (什么 ...
- (译文)12个简单(但强大)的JavaScript技巧(一)
原文连接: 12 Simple (Yet Powerful) JavaScript Tips 我将会介绍和解析12个简单但是强大的JavaScript技巧. 这些技巧所有的JavaScript程序员都 ...
- 21个值得收藏的Javascript技巧
1 Javascript数组转换为CSV格式 首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件.则我们可以使用如下的小技巧,代码如 ...
- 12个非常有用的JavaScript技巧
在这篇文章中,我将分享12个非常有用的JavaScript技巧.这些技巧可以帮助你减少并优化代码. 1) 使用!!将变量转换成布尔类型 有时,我们需要检查一些变量是否存在,或者它是否具有有效值,从而将 ...
- 原生JavaScript技巧大收集
原生JavaScript技巧大收集 地址:http://itindex.net/detail/47244-javascript
- 原生JavaScript技巧大收集100个
原生JavaScript技巧大收集 1.原生JavaScript实现字符串长度截取function cutstr(str, len) { var temp; var icount = 0; var p ...
- javascript json写法
javascript json写法 var shuxing = {name:"super",sex:"19",work:"IT"}; 这个k ...
- 【转】45个实用的JavaScript技巧、窍门和最佳实践
原文:https://colobu.com/2014/09/23/45-Useful-JavaScript-Tips,-Tricks-and-Best-Practices/ 目录 [−] 列表 第一次 ...
随机推荐
- Bestcoder Round#45
1001 给定数n,要我们求该数的二进制中有多少组1, 相邻的1称为1组, 直接位运算摸你即可 #include <stdio.h> #include <string.h> # ...
- 【j2ee spring】27、巴巴荆楚网-整合hibernate4+spring4(2)
巴巴荆楚网-整合hibernate4+spring4(2) 1.图文项目 2.首先我们引入对应的jar包 这里用的是oracle 11g,所以我们使用的数据库连接jar包是ojdbc6, 的区别就是支 ...
- WEB网站性能优化
最近做了一个WEB现场.幸运的是,一开始.但后来越来越慢,特别是在调试模式,,这肯定是我们的代码有问题.但是即使业务不是非常复杂的也非常慢,我们就想当然的觉得我们的代码没问题,可最后证明还是我们的代码 ...
- hdu 4891---水的问题 但WA非常多
这个问题是在一个坑----即使在使用long long 这将是超出范围 自己显得很长的时间去阅读很多次的称号仍然没想到 当时的想法是要记住----无论如何,我用long long 已经最大范围.当然 ...
- strcpy_s与strcpy对照
strcpy_s和strcpy()函数功能几乎相同.strcpy函数.就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它仅仅能假定缓冲足够大来容纳要拷贝的字符串.在程序执行时,这将导致不可 ...
- ZOJ 3734 LIKE vs CANDLE
题目意思:(13年长沙站的一道水DP,本人也去了,当时太水笔) 说俩个人竞争选票,每个人可以随机选择支持谁.每个人带有权重不同. 现在已经结束了投票阶段,你一个骇客 支持LIKE 你写了一个软件可以 ...
- ZOJ - 3822 Domination (DP)
Edward is the headmaster of Marjar University. He is enthusiastic about chess and often plays chess ...
- PHP第七课 使用方法数组2
学习平台: 1.了解数组函数 2.输出随机验证码 1.数组函数: 数组函数: //作用:提供了非常多官方写的非常实用的代码段,提高编写速度. 1.数组的键值操作函数 2.统计数组的元素和唯一性 3.使 ...
- ARM装配说明MCR/MRC学习
MCR指令ARM数据寄存器传送到协处理器寄存器.假设协处理器不能成功运行操作.会产生未定义指令中止. 语法教学格式: MCR{<cond>} p15, 0, <Rd>, < ...
- POJ 3009-Curling 2.0(DFS)
Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12158 Accepted: 5125 Desc ...