123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>The source code</title>
- <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
- <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
- <style type="text/css">
- .highlight { display: block; background-color: #ddd; }
- </style>
- <script type="text/javascript">
- function highlight() {
- document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
- }
- </script>
- </head>
- <body onload="prettyPrint(); highlight();">
- <pre class="prettyprint lang-js"><span id='Function'>/**
- </span> * @class Function
- *
- * Every function in JavaScript is actually a `Function` object.
- *
- * `Function` objects created with the `Function` constructor are parsed when the
- * function is created. This is less efficient than declaring a function and
- * calling it within your code, because functions declared with the function
- * statement are parsed with the rest of the code.
- *
- * All arguments passed to the function are treated as the names of the
- * identifiers of the parameters in the function to be created, in the order in
- * which they are passed.
- *
- * Invoking the `Function` constructor as a function (without using the `new`
- * operator) has the same effect as invoking it as a constructor.
- *
- * # Specifying arguments with the `Function` constructor
- *
- * The following code creates a `Function` object that takes two arguments.
- *
- * // Example can be run directly in your JavaScript console
- *
- * // Create a function that takes two arguments and returns the sum of those
- * arguments
- * var adder = new Function("a", "b", "return a + b");
- *
- * // Call the function
- * adder(2, 6);
- * // > 8
- *
- * The arguments "a" and "b" are formal argument names that are used in the
- * function body, "return a + b".
- *
- * <div class="notice">
- * Documentation for this class comes from <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">MDN</a>
- * and is available under <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative Commons: Attribution-Sharealike license</a>.
- * </div>
- */
- <span id='Function-method-constructor'>/**
- </span> * @method constructor
- * Creates new Function object.
- *
- * @param {String...} args
- * Names to be used by the function as formal argument names. Each must be a
- * string that corresponds to a valid JavaScript identifier or a list of such
- * strings separated with a comma; for example "`x`", "`theValue`", or "`a,b`".
- * @param {String} functionBody
- * A string containing the JavaScript statements comprising the function
- * definition.
- */
- // Properties
- <span id='Function-property-length'>/**
- </span> * @property {Number} length
- * Specifies the number of arguments expected by the function.
- */
- //Methods
- <span id='Function-method-apply'>/**
- </span> * @method apply
- * Applies the method of another object in the context of a different object (the
- * calling object); arguments can be passed as an Array object.
- *
- * You can assign a different this object when calling an existing function. `this` refers to the
- * current object, the calling object. With `apply`, you can write a method once and then inherit it
- * in another object, without having to rewrite the method for the new object.
- *
- * `apply` is very similar to call, except for the type of arguments it supports. You can use an
- * arguments array instead of a named set of parameters. With apply, you can use an array literal, for
- * example, `fun.apply(this, ['eat', 'bananas'])`, or an Array object, for example, `fun.apply(this,
- * new Array('eat', 'bananas'))`.
- *
- * You can also use arguments for the `argsArray` parameter. `arguments` is a local variable of a
- * function. It can be used for all unspecified arguments of the called object. Thus, you do not have
- * to know the arguments of the called object when you use the `apply` method. You can use arguments
- * to pass all the arguments to the called object. The called object is then responsible for handling
- * the arguments.
- *
- * Since ECMAScript 5th Edition you can also use any kind of object which is array like, so in
- * practice this means it's going to have a property length and integer properties in the range
- * `[0...length)`. As an example you can now use a NodeList or a own custom object like `{'length': 2,
- * '0': 'eat', '1': 'bananas'}`.
- *
- * You can use `apply` to chain constructors for an object, similar to Java. In the following example,
- * the constructor for the `Product` object is defined with two parameters, `name` and `value`. Two
- * other functions `Food` and `Toy` invoke `Product` passing `this` and `arguments`. `Product`
- * initializes the properties `name` and `price`, both specialized functions define the category. In
- * this example, the `arguments` object is fully passed to the product constructor and corresponds to
- * the two defined parameters.
- *
- * function Product(name, price) {
- * this.name = name;
- * this.price = price;
- *
- * if (price < 0)
- * throw RangeError('Cannot create product "' + name + '" with a negative price');
- * return this;
- * }
- *
- * function Food(name, price) {
- * Product.apply(this, arguments);
- * this.category = 'food';
- * }
- * Food.prototype = new Product();
- *
- * function Toy(name, price) {
- * Product.apply(this, arguments);
- * this.category = 'toy';
- * }
- * Toy.prototype = new Product();
- *
- * var cheese = new Food('feta', 5);
- * var fun = new Toy('robot', 40);
- *
- * Clever usage of `apply` allows you to use built-ins functions for some tasks that otherwise
- * probably would have been written by looping over the array values. As an example here we are going
- * to use Math.max/Math.min to find out the maximum/minimum value in an array.
- *
- * //min/max number in an array
- * var numbers = [5, 6, 2, 3, 7];
- *
- * //using Math.min/Math.max apply
- * var max = Math.max.apply(null, numbers); // This about equal to Math.max(numbers[0], ...) or
- * // Math.max(5, 6, ..)
- * var min = Math.min.apply(null, numbers);
- *
- * //vs. simple loop based algorithm
- * max = -Infinity, min = +Infinity;
- *
- * for (var i = 0; i < numbers.length; i++) {
- * if (numbers[i] > max)
- * max = numbers[i];
- * if (numbers[i] < min)
- * min = numbers[i];
- * }
- *
- * But beware: in using `apply` this way, you run the risk of exceeding the JavaScript engine's
- * argument length limit. The consequences of applying a function with too many arguments (think more
- * than tens of thousands of arguments) vary across engines, because the limit (indeed even the nature
- * of any excessively-large-stack behavior) is unspecified. Some engines will throw an exception. More
- * perniciously, others will arbitrarily limit the number of arguments actually passed to the applied
- * function. (To illustrate this latter case: if such an engine had a limit of four arguments [actual
- * limits are of course significantly higher], it would be as if the arguments 5, 6, 2, 3 had been
- * passed to apply in the examples above, rather than the full array.) If your value array might grow
- * into the tens of thousands, use a hybrid strategy: apply your function to chunks of the array at a
- * time:
- *
- * function minOfArray(arr)
- * {
- * var min = Infinity;
- * var QUANTUM = 32768;
- * for (var i = 0, len = arr.length; i < len; i += QUANTUM)
- * {
- * var submin = Math.min.apply(null, numbers.slice(i, Math.min(i + QUANTUM, len)));
- * min = Math.min(submin, min);
- * }
- * return min;
- * }
- *
- * var min = minOfArray([5, 6, 2, 3, 7]);
- *
- * @param {Object} thisArg The value of this provided for the call to fun. Note that this may not be
- * the actual value seen by the method: if the method is a function in non-strict mode code, null and
- * undefined will be replaced with the global object, and primitive values will be boxed.
- * @param {Array} argsArray An array like object, specifying the arguments with which fun should be
- * called, or null or undefined if no arguments should be provided to the function.
- * @return {Object} Returns what the function returns.
- */
- <span id='Function-method-call'>/**
- </span> * @method call
- * Calls (executes) a method of another object in the context of a different
- * object (the calling object); arguments can be passed as they are.
- *
- * You can assign a different this object when calling an existing function. `this` refers to the
- * current object, the calling object.
- *
- * With `call`, you can write a method once and then inherit it in another object, without having to
- * rewrite the method for the new object.
- *
- * You can use call to chain constructors for an object, similar to Java. In the following example,
- * the constructor for the product object is defined with two parameters, name and value. Another
- * object, `prod_dept`, initializes its unique variable (`dept`) and calls the constructor for
- * `product` in its constructor to initialize the other variables.
- *
- * function Product(name, price) {
- * this.name = name;
- * this.price = price;
- *
- * if (price < 0)
- * throw RangeError('Cannot create product "' + name + '" with a negative price');
- * return this;
- * }
- *
- * function Food(name, price) {
- * Product.call(this, name, price);
- * this.category = 'food';
- * }
- * Food.prototype = new Product();
- *
- * function Toy(name, price) {
- * Product.call(this, name, price);
- * this.category = 'toy';
- * }
- * Toy.prototype = new Product();
- *
- * var cheese = new Food('feta', 5);
- * var fun = new Toy('robot', 40);
- *
- * In this purely constructed example, we create anonymous function and use `call` to invoke it on
- * every object in an array. The main purpose of the anonymous function here is to add a print
- * function to every object, which is able to print the right index of the object in the array.
- * Passing the object as `this` value was not strictly necessary, but is done for explanatory purpose.
- *
- * var animals = [
- * {species: 'Lion', name: 'King'},
- * {species: 'Whale', name: 'Fail'}
- * ];
- *
- * for (var i = 0; i < animals.length; i++) {
- * (function (i) {
- * this.print = function () {
- * console.log('#' + i + ' ' + this.species + ': ' + this.name);
- * }
- * }).call(animals[i], i);
- * }
- *
- * @param {Object} thisArg The value of this provided for the call to `fun`.Note that this may not be
- * the actual value seen by the method: if the method is a function in non-strict mode code, `null`
- * and `undefined` will be replaced with the global object, and primitive values will be boxed.
- * @param {Object...} args Arguments for the object.
- * @return {Object} Returns what the function returns.
- */
- <span id='Function-method-toString'>/**
- </span> * @method toString
- * Returns a string representing the source code of the function. Overrides the
- * `Object.toString` method.
- *
- * The {@link Function} object overrides the `toString` method of the Object object; it does
- * not inherit Object.toString. For `Function` objects, the `toString` method returns a string
- * representation of the object.
- *
- * JavaScript calls the `toString` method automatically when a `Function` is to be represented as a
- * text value or when a Function is referred to in a string concatenation.
- *
- * For `Function` objects, the built-in `toString` method decompiles the function back into the
- * JavaScript source that defines the function. This string includes the `function` keyword, the
- * argument list, curly braces, and function body.
- *
- * @return {String} The function as a string.
- */</pre>
- </body>
- </html>
|