javascript apply|call的使用

来源:互联网 发布:java单例模式的优点 编辑:程序博客网 时间:2024/05/24 04:26
var log = console.log;/** * var func = function(arg1, arg2) {} * func.call(obj, arg1, arg2); * func.apply(obj, [arg1, arg2]); * func.bind(obj)(arg1, arg2); */function fruits() {}fruits.prototype = {color : "red",say : function() {log("My color is " + this.color);}}banana = {color : "yellow"}var apple = new fruits();apple.say();apple.say.call(banana);apple.say.apply(banana);// 常用用法log("1.数组追加")var array1 = [12, "foo"];var array2 = ["dd", 5];Array.prototype.push.apply(array1, array2);log(array1);log(array2);log("2.获取数组中的最大值和最小值");var number = [5, 24, 20, -54];var maxNum = Math.max.apply(Math, number);var minNum = Math.min.call(Math, 5, 24, 20, -54);log(maxNum);log(minNum);log("3.验证是否是数组(前提是toString()方法没有被重写过)");function isArray(obj) {return Object.prototype.toString.call(obj) == '[object Array]';}log("4.给log消息加前缀");function nlog() {var args = Array.prototype.slice.call(arguments);args.unshift('log:');console.log.apply(console, args);}nlog("123", 2, "abc")log("5.数组降维");function reduceDimension(arr) {return Array.prototype.concat.apply([], arr);};var arr = [[1, 2], [3, 4], [5, 6]];log(reduceDimension(arr));arr = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]];log(reduceDimension(reduceDimension(arr)));log('--------------------------')var obj = {x : 81};var foo = {getX : function(y) {log(this.x, y);}};foo.getX.bind(obj)(12);foo.getX.call(obj, 12);foo.getX.apply(obj, [12]);