JS Apply AOP EXTEND

/*Apply 方法的妙用*/

/*1.数组最大值*/
console.log(Math.max(19, 2, 25, 16, 78));//78
/*如果参数是一个一维数组*/
var arr = [19, 2, 25, 16, 78];
console.log(Math.max(arr));//NaN
console.log(Math.max.apply(null, arr));//78

/*多维数组可以这么修改:*/
var a = [1, 2, 3,
[5, 6],
[1, 4, 8]
];
/*转化为一维数组*/
var ta = a.join(",").split(",");
console.log(Math.max.apply(null, ta)); //8


/*2.Push数组*/
var arr1 = [1, 2, 3];
var arr2 = [3, 4, 5];
arr1.push(arr2);
console.log(arr1); /*[1, 2, 3, [3, 4, 5] ] */

var arr1 = [1, 2, 3];
Array.prototype.push.apply(arr1, arr2);
console.log(arr1); /*[1, 2, 3, 3, 4, 5 ] */


/*3.继承*/
var Class = {
create : function(){
return function(){
this.initialize.apply(this,arguments);
}
}
}

var Animal = Class.create();
Animal.prototype.initialize = function(species,name){
this.species = species;
this.name = name;
}

a = new Animal("Cat","Buddy");


var GoldenRetriever = Class.create();
GoldenRetriever.prototype.initialize = function(species,name,age){
Animal.prototype.initialize.apply(this,arguments);
this.age = age;
}

g = new GoldenRetriever("Dog","Puppy","2");
console.log(a);//Object name: "Buddy", species: "Cat"
console.log(g);//Object age: "2", name: "Puppy", species: "Dog"


/*4.aop*/
Function.prototype.before = function(func){
var _this = this;
return function(){
if (func.apply(this,arguments) === false){
return false;
}
return _this.apply(this,arguments);
}
}

window.onload = function(){
console.log("onload.");
}

window.onload = (window.onload || function(){} ).before(function(){
console.log("onload before.")
}) //onload before. onload.

 

Function.prototype.after = function(func){
var _this = this;
return function(){
var result = _this.apply(this, arguments);
if (result === false) return false;
func.apply(this,arguments);
return result;
}
}

window.onload = (window.onload || function(){}).after(function(){
console.log("onload after.")
}) //onload before. onload. onload after.

posted @ 2013-06-07 14:06  mguo  阅读(354)  评论(0编辑  收藏  举报