function observable(el) {
var callbacks = {}, slice = [].slice;
el.on = function(events, fn) {
if (typeof fn === "function") {
events.replace(/\S+/g, function(name, pos) {
(callbacks[name] = callbacks[name] || []).push(fn);
fn.typed = pos > 0;
});
}
return el;
};
el.off = function(events, fn) {
if (events === "*") callbacks = {};
else if (fn) {
var arr = callbacks[events];
for (var i = 0, cb; (cb = arr && arr[i]); ++i) {
if (cb === fn) { arr.splice(i, 1); i--; }
}
} else {
events.replace(/\S+/g, function(name) {
callbacks[name] = [];
});
}
return el;
};
// only single event supported
el.one = function(name, fn) {
if (fn) fn.one = true;
return el.on(name, fn);
};
el.trigger = function(name) {
var args = slice.call(arguments, 1),
fns = callbacks[name] || [];
for (var i = 0, fn; (fn = fns[i]); ++i) {
if (!fn.busy) {
fn.busy = true;
fn.apply(el, fn.typed ? [name].concat(args) : args);
if (fn.one) { fns.splice(i, 1); i--; }
fn.busy = false;
}
}
return el;
};
return el;
};
var my_obj = {};
observable(my_obj);
my_obj.on("update", function() { /* */ });
my_obj.trigger("update");
$(function() {
var player;
function fGetScript() {
$.getScript("http://www.youtube.com/player_api/", function(data) {
igor("done");
window.onYouTubeIframeAPIReady = function() {
igor("onYouTubeIframeAPIReady");
$(".loadvid, .loadvid2").on("click", function() {
var videoID = $(this).val();
if (player === null) {
player = new YT.Player('player', { videoId: videoID, events: { 'onReady': onPlayerReady } });
} else {
player.loadVideoById(videoID);
}
});
}
});
}
});
if (document.getElementById("my_file_input_id").files.length) {
// файлы выбраны
}
function MyClass() {
var prop = "Hello"; // private prop.
this.prop = "World"; // public prop.
function foo() { // private method
return prop + this.prop;
}
this.foo = function() { // public method
return foo();
}
}
var basketModule = (function() {
var basket = []; // приватная переменная
return { // методы доступные извне
addItem: function(values) {
basket.push(values);
},
getItemCount: function() {
return basket.length;
},
getTotal: function() {
var q = this.getItemCount(),p=0;
while(q--){
p+= basket[q].price;
}
return p;
}
}
}());