javascriptモードのAPIモード

3105 ワード

javascript API  :
             ,      。            :
1)    :
      ,          ,     :
function demo01 (callback){
	callback();
}
function test01(){
	console.log("aaa");
}
demo01(test01);//"aaa"

            :
var myobj = {
	name:"zhangsan",
	setName:function(person){
		person.name = this.name;
	}
};
function getName(callback){
	var obj={};
	if(typeof callback === "function"){
		callback(obj);
	}
	return obj.name;
}
console.log(getName(myobj.setName));//     ,     this         (window),window.name     。

         ?              。
var myobj = {
	name:"zhangsan",
	setName:function(person){
		person.name = this.name;
	}
};
function getName(callback,callObj){
	var obj={};
	if(typeof callback === "string"){
	   callback = callObj[callback];
	}
	if(typeof callback === "function"){
		callback.call(callObj,obj);
	}
	return obj.name;
}
console.log(getName("setName",myobj));//zhangsan
console.log(getName(myobj.setName,myobj));//zhangsan

2)      :
  :
a)         ,    ;
b)          
c)       
d)         
  :
a)           
b)          ,        
var configure = {
	name:"zhangsan",
	sex :"male",
	age :23
}
setPerson(configure);//      

3)      :
     ,           。      :
var parent = function(){
	var name = "zhangsan";
	return function(){
		return name;
	}
}
console.log(parent()());//zhangsan

parent()         ,       ,                  ,       
       ,           。              :
var getCount = function(){
	var i=0;
	return function(){
		return ++i;
	}
}
var getI = getCount();
getI();//1
getI();//2
getI();//3

4)Curry   :
            :
var add = function(x,y){
	return x+y;
}
add(1,2)//3
           :
var add = function(x,y){
	return 1+y;
}
var add = function(x,y){
	return 1+2;
}

   curry add            :
var add = function(x,y){
	if(typeof y === "undefined"){
		return function(y){
			return x + y;
		}
	}
	return x+y;
}
console.log(add(1));//function
console.log(add(1,2));//3
console.log(add(1)(2));//3

      ,       curry   myCurry
function myCurry(fn){
	var slice = Array.prototype.slice,
		oldargs = slice.call(arguments,1);
	return function(){
		var newargs = slice.call(arguments),
			args = oldargs.concat(newargs);
		return fn.apply(null,args);
	}
}
function multi(a,b,c,d){
	return a*b*c*d;
}
console.log(myCurry(multi,1,2)(3,4));//24
      ,        Curry  ,            ,                  ,        Curry 。