Original: JavaScript Tips & notation
JavaScript tips:
1 "State machine"
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 (' execute complete '); }); SetTimeout (method1, 1000); SetTimeout (METHOD2, 1000);
State machines are typically used when multiple tasks are in progress, and the task executes to a certain stage to execute a function!
Scenario: Simultaneously requests multiple asynchronous concurrent executions (Ajax,nodejs io), and processes the result collection, the above is the simplest, but not graceful enough,
This is the best I've ever found. js Asynchronous process article: http://www.docin.com/p-687111809.html~
2 "Special application of SetTimeout
var hander=settimeout (function () {},100); cleartimeout (hander);
Scenario 1: Button Three Quick click to trigger event
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; }, +); } function Run () { console.log (' Run '); } <input type= "button" onclick= "Btnclick ()" value= "Quick Click Three-time Trigger"/>
Scenario 2: Fast multiple clicks trigger only the last time
var hander = 0; function Btnclick () { if (hander! = 0) { cleartimeout (hander); hander = 0; } hander = SetTimeout (function () { Run (); },); } function Run () { console.log (' Run '); } <input type= "button" onclick= "Btnclick ()" value= "Quick Click Triggers only last"/>
Other ( long-term update ) ....
JavaScript notation:
《. & [] "
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" is the most common
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 ());
"Run Create object" simple closure
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 ')}}} ); C25/>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 ();
Written at the end:
Prototype "function" built-in properties
__proto__ built-in properties for arbitrary objects
Add.call (obj) executes the add apply under the Obj object domain
Add.bind (obj) binds an obj object execution domain to the Add, and the Obj object does not get Add,bind returns a binding to execute the domain obj function add
Class. Add, which is static and will not be instantiated
Class. Prototype.add, which is a modified prototype, can instantiate the prototype equivalent of this
Object. Add is an add for an object, only the object uses the
Object. __proto__, which is the set of all properties of the object,
Expression: Object. __proto__= class. Prototype is fully inherited for the original property, object. __proto__= another object. __proto__ simple deep copy for objects
Expression: Object. __proto__.add Add or modify add for an object, the same as: Object. __proto__.add () for execution
Same : expression:for (var i in o.__proto__) {Console.log (o.__proto__[i])} to traverse object Properties
Expression: for (var I in class. prototype) {} for traversing class properties
JavaScript Tips & notation