面向对象的JavaScript-006-Function.prototype.apply()的3种作用

1.

 1 // Function.prototype.apply()的作用
 2     // 1.Using apply to chain constructors
 3     Function.prototype.construct = function (aArgs) {
 4       var oNew = Object.create(this.prototype);
 5       this.apply(oNew, aArgs);
 6       return oNew;
 7     };
 8     // 或者The Object.create() method used above is relatively new. For an alternative method using closures, please consider the following alternative:
 9     Function.prototype.construct = function(aArgs) {
10       var fConstructor = this, fNewConstr = function() {
11         fConstructor.apply(this, aArgs);
12       };
13       fNewConstr.prototype = fConstructor.prototype;
14       return new fNewConstr();
15     };
16
17     function MyConstructor() {
18       for (var nProp = 0; nProp < arguments.length; nProp++) {
19         this['property' + nProp] = arguments[nProp];
20       }
21     }
22
23     var myArray = [4, 'Hello world!', false];
24     var myInstance = MyConstructor.construct(myArray);
25
26     console.log(myInstance);
27     console.log(myInstance.property1);                // logs 'Hello world!'
28     console.log(myInstance instanceof MyConstructor); // logs 'true'
29     console.log(myInstance.constructor);
30
31     // 2.Using apply and built-in functions
32     // min/max number in an array
33     var numbers = [5, 6, 2, 3, 7];
34
35     // using Math.min/Math.max apply
36     var max = Math.max.apply(null, numbers);
37     // This about equal to Math.max(numbers[0], ...)
38     // or Math.max(5, 6, ...)
39
40     var min = Math.min.apply(null, numbers);
41     console.log(max);
42     console.log(min);
43     // vs. simple loop based algorithm
44     max = -Infinity, min = +Infinity;
45
46     for (var i = 0; i < numbers.length; i++) {
47       if (numbers[i] > max) {
48         max = numbers[i];
49       }
50       if (numbers[i] < min) {
51         min = numbers[i];
52       }
53     }
54     console.log(max);
55     console.log(min);
56
57     function minOfArray(arr) {
58       var min = Infinity;
59       var QUANTUM = 32768;
60
61       for (var i = 0, len = arr.length; i < len; i += QUANTUM) {
62         var submin = Math.min.apply(null, arr.slice(i, Math.min(i+QUANTUM, len)));
63         min = Math.min(submin, min);
64       }
65
66       return min;
67     }
68
69     var min = minOfArray([5, 6, 2, 3, 7]);
70     console.log(min);
71
72     // 3.Using apply in "monkey-patching"
73     // Apply can be the best way to monkey-patch a built-in function of Firefox, or JS libraries. Given someobject.foo function, you can modify the function in a somewhat hacky way, like so:
74     var originalfoo = someobject.foo;
75     someobject.foo = function() {
76       // Do stuff before calling function
77       console.log(arguments);
78       // Call the function as it would have been called normally:
79       originalfoo.apply(this, arguments);
80       // Run stuff after, here.
81     }

面向对象的JavaScript-006-Function.prototype.apply()的3种作用

You can do anything you set your mind to, man!

Original: https://www.cnblogs.com/shamgod/p/5523575.html
Author: shamgod
Title: 面向对象的JavaScript-006-Function.prototype.apply()的3种作用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/536419/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球