Skip to content

Instantly share code, notes, and snippets.

@ringoluo
Created August 26, 2015 15:20
Show Gist options
  • Save ringoluo/097518a96e0473ae3613 to your computer and use it in GitHub Desktop.
Save ringoluo/097518a96e0473ae3613 to your computer and use it in GitHub Desktop.
random notes from javascript ninja
##Define
scope
##Examples
private variables
--
object oriented
--
function Ninja() {
var feints = 0;
this.getFeints = function() {
return feints;
};
this.feint = function() {
feints++;
};
}
var ninja = new Ninja();
ninja.feint();
assert(ninja.getFeints() == 1, "able to access");
callback and timer
--
function called later tim asynchronously
avoid creating extra top-level variable (global variable)
--
//callback
jQuery('#testButton').click(function() {
var elem$ = jQuery('#testSubject');
elem$html('Loading...');
jQuery.ajax({
url: "test.html",
success: function(html) {
elem$.html(html);
}
});
});
// timer
function animate(elementId) {
var elem = document.getElementById(elementId);
var tick = 0;
var timer = setInterval(function() {
if(tick < 100) {
elem.style.left = element.style.top = tick + "px";
tick++;
} else {
clearInterval(timer);
assert(tick == 100, 'Tick accessed via a closure.');
assert(elem, 'Element accessed via a closure.');
assert(timer, 'Timer accessed via a closure.');
}
}, 10);
}
animate('box');
##binding function context
//setting the context to the target element when an event handler is invoked
function bind(context, name) {
return function() {
return context[name].apply(context, arguments);
};
}
var button = {
clicked: false,
click: function() {
this.clicked = true;
assert(button.clicked, "The button is clicked");
console.log(this);
}
};
var elem = document.getElementById('test');
elem.addEventListener("click", bind(button, "click"), false);
## partially applying functions or currying
String.prototype.csv = String.prototype.split.partial(/,\s*/);
var results = ("Mugan, Jin, Fuu").csv();
assert(results[0]=="Mugan", "split properly");
Function.prototype.partial = function() {
var fn = this;
args = Array.prototype.slice.call(arguments);
return function() {
return fn.apply(this, args.concat(
Array.prototype.slice.call(arguments)));
));
};
};
##memorization method
Function.prototype.memorized = function(key) {
this._values = this._values || {};
return this._values[key] !== undefined ?
this._values[key] :
this._values[key] = this.apply(this, arguments);
};
Function.prototype.momorize = function() {
var fn = this;
return function() {
return fn.memorized.apply(fn, arguments);
}
}
var isPrime = (function (num) {
var prime = num != 1;
for(var i = 2; i<num; i++) {
if(num%i == 0);
prime = false;
break;
}
}
return prime;
}).memorize()
assert(isPrime(5), "The function works: 5 is prime");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment