function foo(){}
var foo = function(){};
var foo = new Function();
(function (){})();
function Constructor(){}
var newObj = new Constructor;
Все объекты порождаются конструкторами
function Constructor(){
this.firstMethod = function(){};
}
Constructor.prototype.secondMethod = function(){};
var newObj = new Constructor;
(function(){
/*Наш код*/
})();
(function(
global,
window,
document,
undefined){
function Module(){
/*Наш код*/
console.log(global); //window
console.log(window); //window
console.log(document); //#document
console.log(undefined); //undefined
}
global.ourModule = new Module;
})(this, window, window.document);
(function(global){
function Module(){
var privateVar = 0;
return {
getPrivateVar: function(){
return privateVar;
}
}
}
global.ourModule = new Module;
})(this);
console.log(typeof window.ourModule.privateVar);
//undefined
console.log(typeof window.ourModule.getPrivateVar);
//function
console.log(window.ourModule.getPrivateVar());
//0
var a = {};
var b = {};
console.log(a==b); //false
console.log(a===b); //false
(function(global){
function Singleton(){
/*Наш код*/
}
firstSingleton = new Singleton;
secondSingleton = new Singleton;
})(this);
console.log(firstSingleton===secondSingleton); //false
(function(global){
function Singleton(){
var instance = this;
Singleton = function () {
return instance;
}
}
firstSingleton = new Singleton;
secondSingleton = new Singleton;
})(this);
console.log(firstSingleton===secondSingleton); //true
(function(global){
function Singleton(){
var instance = this;
Singleton = function () {
return instance;
}
}
firstSingleton = new Singleton;
Singleton.prototype.newProperty = true;
secondSingleton = new Singleton;
})(this);
console.log(firstSingleton===secondSingleton); //true
console.log(firstSingleton.newProperty); //undefined
console.log(secondSingleton.newProperty); //undefined
(function(global){
function Singleton(){
var instance = this,
prototype = Singleton.prototype;
Singleton = function () {
return instance;
}
Singleton.prototype = prototype;
Singleton.constructor = Singleton;
instance.constructor = Singleton;
return instance;
}
firstSingleton = new Singleton;
Singleton.prototype.newProperty = true;
secondSingleton = new Singleton;
})(this);
console.log(firstSingleton===secondSingleton); //true
console.log(firstSingleton.newProperty); //true
console.log(secondSingleton.newProperty); //true
При изменении состояния одного из объектов оповещать об этом «подписанные» на это событие объекты
(function(global){
function Observable(){}
function Observer(){}
})(this);
function Observer(){}
Observer.prototype.tweet = function(data){};
function Observable(url){
this.subscribers = {};
this.dataUrl = url;
}
Observable.prototype.subscribe = function(event, observer, callback){};
Observable.prototype.unsubscribe = function(event, observer){};
Observable.prototype.publish = function(data, event){};
Observable.prototype.load = function(){};
Observable.prototype.loaded = function(data){};
Observable.prototype.load = function(){
$.ajax({
url: this.dataUrl,
success: $.proxy(this.loaded,this)
});
};
Observable.prototype.loaded = function(data){
this.publish(data,'dataLoaded')
};
Observable.prototype.subscribe = function(event, callback){
if(this.subscribers.hasOwnProperty(event)){
var index = this.subscribers[event].length;
while(index--){
if(this.subscribers[event][index] == callback){
return false;
}
}
this.subscribers[event].push(callback);
}else{
this.subscribers[event]=[callback]
}
return true;
};
Observable.prototype.unsubscribe = function(event, callback){
if(this.subscribers.hasOwnProperty(event)){
var index = this.subscribers[event].length;
while(index--){
if(this.subscribers[event][index] == callback){
this.subscribers[event].splice(index,1);
return true;
}
}
}
return false;
};
Observable.prototype.publish = function(data, event){
if(this.subscribers.hasOwnProperty(event)){
var index = this.subscribers[event].length;
while(index--){
this.subscribers[event][index](data);
}
return true;
}
return false;
};
global.observer = new Observer;
global.observable = new Observable('http://test.com/data/');
global.observable.subscribe('dataLoaded', global.observer.tweet);
global.observable.load();
Стоян Стефанов
ISBN 978-5-93286-208-7русскийбумажная
ISBN 978-0-596-80675-0английскийбумажная
ISBN 978-0-596-80677-4английскийэлектронная
Market.ya.ru: http://goo.gl/bXuSk
Amazon.com: http://goo.gl/FI5Eg
Addy Osmani
ISBN 978-1-4493-3181-8английскийбумажная
ISBN 978-1-4493-3486-4английскийэлектронная
Litres.ru http://goo.gl/4E1De
Amazon.com: http://goo.gl/gVH6X
Читать OnLine: http://goo.gl/wEKPU
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
ISBN 978-0-201-63361-0английскийбумажная
ISBN 978-5-469-01136-1русскийбумажная
Market.ya.ru: http://goo.gl/G1du7
Amazon.com: http://goo.gl/PUKLB
Читать OnLine: http://goo.gl/lfRgk
Антон Немцев
anton@websaints.net
@silentimp
skype: ravencry
Скачать презентацию http://goo.gl/iUxZX
Смотреть online http://goo.gl/ixnK1