博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript技巧&写法
阅读量:6952 次
发布时间:2019-06-27

本文共 5559 字,大约阅读时间需要 18 分钟。

原文:

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异步流程文章: ~

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');        }     

  场景2》:快速多次点击只触发最后一次

var hander = 0;        function btnClick() {            if (hander != 0) {                clearTimeout(hander);                hander = 0;            }            hander = setTimeout(function () {                Run();            }, 300);        }        function Run() {            console.log('Run');        }    

 其他(长期更新)....

 

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 ) {}为遍历类属性

     

转载地址:http://hrjil.baihongyu.com/

你可能感兴趣的文章
mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
查看>>
IBM WebSphere MQ win 安装过程
查看>>
获取目录下子目录及文件的大小
查看>>
DNS服务器基本服务(正向、反向解析)、别名、递归、迭代、增量传输、完全传输...
查看>>
varchar nvarchar char nchar varchar2 nvarchar2
查看>>
js 百度地图 添加自定义控件
查看>>
UIscrollview、UITableView中实现点击按钮折叠文字和展开文字
查看>>
VIM教程二
查看>>
AI考拉技术分享会--IDE 常用功能 for Node.js
查看>>
1、常用规则引擎、java规则引擎的标准。
查看>>
在ubuntu11.10 DELLD630中解决无线(BCM4311)不能启用
查看>>
Tomcat session Error
查看>>
HAProxy双机高可用方案之HAProxy+Keepalived
查看>>
mysql忘记密码解决方法
查看>>
Node.js开发指南 学习日志 3.3.3创建包
查看>>
第三方QQ登录不回调 (Android)
查看>>
Laravel5.3之Session源码解析(上)
查看>>
ConcurrentHashMap实现原理及源码分析
查看>>
ubuntu14安装配置-搜狗输入法/更新源
查看>>
UITextField设置大全
查看>>