mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-10-10 13:23:42 +00:00
83 lines
2.3 KiB
JavaScript
83 lines
2.3 KiB
JavaScript
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||
|
|
||
|
|
||
|
/**
|
||
|
* lang.js - Some missing JavaScript language features
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Partially applies a function to a particular "this object" and zero or
|
||
|
* more arguments. The result is a new function with some arguments of the first
|
||
|
* function pre-filled and the value of |this| "pre-specified".
|
||
|
*
|
||
|
* Remaining arguments specified at call-time are appended to the pre-
|
||
|
* specified ones.
|
||
|
*
|
||
|
* Usage:
|
||
|
* var barMethBound = BindToObject(myFunction, myObj, "arg1", "arg2");
|
||
|
* barMethBound("arg3", "arg4");
|
||
|
*
|
||
|
* @param fn {string} Reference to the function to be bound
|
||
|
*
|
||
|
* @param self {object} Specifies the object which |this| should point to
|
||
|
* when the function is run. If the value is null or undefined, it will default
|
||
|
* to the global object.
|
||
|
*
|
||
|
* @returns {function} A partially-applied form of the speficied function.
|
||
|
*/
|
||
|
this.BindToObject = function BindToObject(fn, self, opt_args) {
|
||
|
var boundargs = fn.boundArgs_ || [];
|
||
|
boundargs = boundargs.concat(Array.slice(arguments, 2, arguments.length));
|
||
|
|
||
|
if (fn.boundSelf_)
|
||
|
self = fn.boundSelf_;
|
||
|
if (fn.boundFn_)
|
||
|
fn = fn.boundFn_;
|
||
|
|
||
|
var newfn = function() {
|
||
|
// Combine the static args and the new args into one big array
|
||
|
var args = boundargs.concat(Array.slice(arguments));
|
||
|
return fn.apply(self, args);
|
||
|
}
|
||
|
|
||
|
newfn.boundArgs_ = boundargs;
|
||
|
newfn.boundSelf_ = self;
|
||
|
newfn.boundFn_ = fn;
|
||
|
|
||
|
return newfn;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Inherit the prototype methods from one constructor into another.
|
||
|
*
|
||
|
* Usage:
|
||
|
*
|
||
|
* function ParentClass(a, b) { }
|
||
|
* ParentClass.prototype.foo = function(a) { }
|
||
|
*
|
||
|
* function ChildClass(a, b, c) {
|
||
|
* ParentClass.call(this, a, b);
|
||
|
* }
|
||
|
*
|
||
|
* ChildClass.inherits(ParentClass);
|
||
|
*
|
||
|
* var child = new ChildClass("a", "b", "see");
|
||
|
* child.foo(); // works
|
||
|
*
|
||
|
* In addition, a superclass' implementation of a method can be invoked
|
||
|
* as follows:
|
||
|
*
|
||
|
* ChildClass.prototype.foo = function(a) {
|
||
|
* ChildClass.superClass_.foo.call(this, a);
|
||
|
* // other code
|
||
|
* };
|
||
|
*/
|
||
|
Function.prototype.inherits = function(parentCtor) {
|
||
|
var tempCtor = function(){};
|
||
|
tempCtor.prototype = parentCtor.prototype;
|
||
|
this.superClass_ = parentCtor.prototype;
|
||
|
this.prototype = new tempCtor();
|
||
|
}
|