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

     

时间: 2024-10-10 07:41:59

JavaScript技巧&写法的相关文章

85种网站常用JavaScript技巧

40+45种网站常用Javascript技巧转载自网络,地址不详. 1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键 <table border oncontextmenu=return(false)><td>no</table> 可用于Table 2. <body onselectstart="return false"> 取消选取.防止复制 3.

冷门却使用的 javascript 技巧

前端已经被玩儿坏了!像用近似乱码的 javascript 拼一个图形,而且可以正常运行等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来.现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容. HTML篇 浏览器地址栏运行JavaScript代码 这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以jav

web开发者需知的45种Javascript技巧大全

web开发者需知的45种Javascript技巧大全 JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发(Node.js和Wakanda)等等.JavaScript还是很多新手踏入编程世界的第一个语言.既可以用来显示浏览器中的简单提示框,也可以通过nodebot或nodruino来控制机器人.能够编写结构清晰.性能高效的JavaScript代码的开发人员,现如今已成了招聘市场最受追捧的人. 在这篇文章里,我将分

超有用的JavaScript技巧,窍门和最佳实践

超有用的JavaScript技巧,窍门和最佳实践 1. 首次为变量赋值时务必使用var关键字 变量没有声明而直接赋值得话,默认会作为一个新的全局变量,要尽量避免使用全局变量. 2. 使用===取代== ==和!=操作符会在需要的情况下自动转换数据类型.但===和!==不会,它们会同时比较值和数据类型,这也使得它们要比==和!=快. [10] === 10 // is false [10] == 10 // is true '10' == 10 // is true '10' === 10 //

45种Javascript技巧大全

原文:45 Useful JavaScript Tips, Tricks and Best Practices 译文:45个有用的JavaScript技巧,窍门和最佳实践 译者:dwqs 在这篇文章中,我将分享一些JavaScript常用的技巧,窍门和最佳实践.不管JavaScript开发者是使用在浏览器/引擎上或者服务器端(SSJS--Service Side JavaScript)JavaScript解释器上,这些他们都是应该知晓的. 需要注意的是,文章中的代码片段均是在最新的Google

原生JavaScript技巧大收集100个

原生JavaScript技巧大收集 1.原生JavaScript实现字符串长度截取function cutstr(str, len) { var temp; var icount = 0; var patrn = /[^\x00-\xff]/; var strre = ""; for (var i = 0; i < str.length; i++) { if (icount < len - 1) { temp = str.substr(i, 1); if (patrn.ex

javascript技巧

1.将arguments转化为数组函数中的预定义变量arguments并非一个真正的数组,而是一个类似数组的对象. 它具有length属性,但是没有slice, push, sort等函数,那么如何使arguments具有这些数组才有的函数呢? 也就是说如何使arguments变成一个真正的数组呢? function args(){ return [].slice.call(arguments) } var m=args(2,5,8) // [2, 5, 8] m.push(10)//可以使用数

超实用的JavaScript技巧及最佳实践

众所周知,JavaScript是一门非常流行的编程语言,开发者用它不仅可以开发出炫丽的Web程序,还可以用它来开发一些移动应用程序(如PhoneGap或Appcelerator),它还有一些服务端实现,比如NodeJS.Wakanda以及其它实现.此外,许多开发者都会把JavaScript选为入门语言,使用它来做一些弹出窗口等小东西. 在这篇文章中,作者将会向大家分享JavaScript开发的小技巧.最佳实践等非常实用的内容,不管你是前端开发者还是服务端开发者,都应该来看看这些小技巧,它们绝对会

瞠目结舌的JavaScript技巧

今天在知乎上看到一篇JavaScript技巧,学习并收藏之 1. 快速打印一个五分制的评分情况 function getRating(rating) { if(rating > 5 || rating < 0) throw new Error('数字不在范围内'); return '★★★★★☆☆☆☆☆'.substring(5 - rating, 10 - rating ); } 2.拼接重复字符串(abcabcabc) //输出n个'abc'拼接的字符串 var str = new Arr