Base() class
General purpose base class
.debounce(fn:function, lapse:number, leading:boolean|null|undefined?)
returns
function
Creates a function bound to the instance that postpones execution until a lapse of n milliseconds
leading
defaults to false
.debounce(method:string, lapse:number, leading:boolean|null|undefined?)
returns
function
Creates a function bound to the instance that postpones execution until a lapse of n milliseconds
method
leading
defaults to false
.delay(method:string|function, nArgs:any*)
Invokes a method asynchronously
method
nArgs
.delay(wait:number, method:string|function, nArgs:any*)
Invokes a method asynchronously after a given delay
wait
method
nArgs
.invoke(fn:function, nArgs:any*)
returns
result:any
Useful for invoking local functions as private methods Returns Return from fn
fn
nArgs
.proxy(fn:function, nArgs:any*)
returns
function
Creates a function bound to the instance; useful for creating bound callbacks Returns fn bound the instance
fn
nArgs
.proxy(method:string, nArgs:any*)
returns
function
Creates a function bound to the instance where method is the name of an instance method Returns instance.method bound to instance
method
nArgs
.throttle(fn:function, buffer:number)
returns
function
Creates a function bound to the instance that won't execute the original function more frequently than n milliseconds no matter how often it is executed
.throttle(method:string, buffer:number)
returns
function
Creates a function bound to the instance that won't execute the original function more frequently than n milliseconds no matter how often it is executed
method
/* istanbul ignore if */
if (typeof define !== "function") {
var define = require("amdefine")(module);
}
define(function (require) {
"use strict";
require("../function/shim");
require("../array/from");
require("../function/debounce");
require("../function/throttle");
var Base,
meta = require("../meta"),
createClass = require("../class");
Base = createClass(
meta({
"name": "Base",
"type": "class",
"description": "General purpose base class"
})
);
Base.method(
meta({
"name": "invoke",
"description": "Useful for invoking local functions as private methods",
"arguments": [{
"name": "fn",
"type": "function",
"description": "Invoked as a method of the instance"
}, {
"name": "nArgs",
"type": "any",
"required": false,
"repeating": true,
"description": "All additional arguments are forwarded to fn as preceding arguments"
}],
"returns": {
"name": "result",
"type": "any",
"description": "Return from fn"
}
}),
invokeFunction
);
Base.method(
meta({
"name": "proxy",
"description": "Creates a function bound to the instance; useful for creating bound callbacks",
"arguments": [{
"name": "fn",
"type": "function",
"description": "Useful for invoking private function objects as methods of the instance"
}, {
"name": "nArgs",
"type": "any",
"required": false,
"repeating": true,
"description": "All additional arguments are forwarded to fn as preceding arguments"
}],
"returns": {
"type": "function",
"description": "fn bound the instance"
}
}),
proxyFunction
);
Base.method(
meta({
"name": "proxy",
"description": "Creates a function bound to the instance where method is the name of an instance method",
"arguments": [{
"name": "method",
"type": "string",
"description": "The name of the method to bind"
}, {
"name": "nArgs",
"type": "any",
"required": false,
"repeating": true,
"description": "All additional arguments are forwarded to the method as preceding arguments"
}],
"returns": {
"type": "function",
"description": "instance.method bound to instance"
}
}),
proxyMethod
);
Base.method(
meta({
"name": "delay",
"description": "Invokes a method asynchronously",
"arguments": [{
"name": "method",
"type": "string|function",
"description": "The name of the method to bind or a function object to be bound"
}, {
"name": "nArgs",
"type": "any",
"required": false,
"repeating": true,
"description": "All additional arguments are forwarded to the method as preceding arguments"
}]
}),
delay
);
Base.method(
meta({
"name": "delay",
"description": "Invokes a method asynchronously after a given delay",
"arguments": [{
"name": "wait",
"type": "number",
"description": "Milliseconds to wait before invoking method"
}, {
"name": "method",
"type": "string|function",
"description": "The name of the method to bind or a function object to be bound."
}, {
"name": "nArgs",
"type": "any",
"required": false,
"repeating": true,
"description": "All additional arguments are forwarded to the method as preceding arguments"
}]
}),
delayBy
);
Base.method(
meta({
"name": "debounce",
"description": "Creates a function bound to the instance that postpones execution until a lapse of n milliseconds",
"arguments": [{
"name": "fn",
"type": "function"
}, {
"name": "lapse",
"type": "number",
"required": true
}, {
"name": "leading",
"type": "boolean",
"description": "If true executes on the leading edge of lapse. Otherwise on the trailing end.",
"default": false
}],
"returns": "function"
}),
debounceFunction
);
Base.method(
meta({
"name": "debounce",
"description": "Creates a function bound to the instance that postpones execution until a lapse of n milliseconds",
"arguments": [{
"name": "method",
"type": "string",
"description": "The name of the method to debounce"
}, {
"name": "lapse",
"type": "number",
"required": true
}, {
"name": "leading",
"type": "boolean",
"description": "If true executes on the leading edge of lapse. Otherwise on the trailing end.",
"default": false
}],
"returns": "function"
}),
debounceMethod
);
Base.method(
meta({
"name": "throttle",
"description": "Creates a function bound to the instance that won't execute the original function more frequently than n milliseconds no matter how often it is executed",
"arguments": [{
"name": "fn",
"type": "function"
}, {
"name": "buffer",
"type": "number",
"required": true
}],
"returns": "function"
}),
throttleFunction
);
Base.method(
meta({
"name": "throttle",
"description": "Creates a function bound to the instance that won't execute the original function more frequently than n milliseconds no matter how often it is executed",
"arguments": [{
"name": "method",
"type": "string",
"description": "The name of the method to debounce"
}, {
"name": "buffer",
"type": "number",
"required": true
}],
"returns": "function"
}),
throttleMethod
);
function invokeFunction (fn) {
var args = Array.from(arguments);
args.shift();
return fn.apply(this, args);
}
function proxyFunction (fn) {
var args = Array.from(arguments);
args.splice(0, 1, this);
return fn.bind.apply(fn, args);
}
function proxyMethod (method) {
var args = Array.from(arguments),
fn = this[method];
args.splice(0, 1, this);
return fn.bind.apply(fn, args);
}
function delay (method) {
setTimeout(this.proxy.apply(this, arguments), 0);
}
function delayBy (wait, method) {
var args = Array.from(arguments);
args.shift();
setTimeout(this.proxy.apply(this, args), wait);
}
function debounceFunction (fn, lapse, leading) {
return fn.bind(this).debounce(lapse, leading);
}
function debounceMethod (method, lapse, leading) {
return this[method].bind(this).debounce(lapse, leading);
}
function throttleFunction (fn, buffer) {
return fn.bind(this).throttle(buffer);
}
function throttleMethod (method, buffer) {
return this[method].bind(this).throttle(buffer);
}
return Base;
});