Javascript重要概念 - gintong/go2js GitHub Wiki

#Javascript语言特性

##动态语言

Javascript是一门动态的,弱类型,基于原型的脚本语言。在一个Javascript对象中,要为一个属性赋值,不用事先创建一个字段,只需要在使用的时候做赋值操作即可。

var people=new Object();
people.name="tony";
people.sayHi=function(){
 return this.name+"say hi!";
}
}

##弱类型 Javascript对象类型无需在声明时指定,它可以是任意类型,解释器会根据上下文自动对其造型,变量可以很大程度的实现复用。

##解释型语言 每次运行均进行解释,开销较大,但保证了动态特性

#Javascript重要概念 ##对象 Javascript中一切皆对象,顶层对象为Object,所谓对象就是属性的集合,Javascript对象本身是一个字典,每个属性由一对键值对进行表示 ##原型对象 Javascript是一种基于原型的语言,每个对象都有一个prototype的属性,这个prototype本身也是一个对象,它也可以有自己的原型,从而在对象层面形成了一个原型链,同时可以在程序中指定prototype对应的对象,这样的链结构可以使Javascript建立传统OO语言的继承关系

//原型对象
function People(name){
	this.name=name;
	this.sayHi=function(){
		return this.name+"say hi!";
	}
}
function Police(type){
	this.type=type;
	this.sayNo=function(){
		return this.name+"say no!";
	}
}

Police.prototype=new People("tom");
var police=new Police("sheriff");
police.sayHi();
police.sayNo();

##函数 一般的函数由Function对象创建而来,但和一般的Object对象不同,Function对象由于Javascript认为其是顺序执行的语句,没有定义的部分,所以不能直接调用属性和方法,只有实例化成实际对象才能被正确识别。 ##函数上下文

##this指针 传统OO语言中,this指针是在类中声明,表示对象本身,而在Javascript中,this指针表示当前上下文中的对象本身,即调用者的引用,换句话来说,this的值并非函数如何被声明而确定,而是由函数如何被调用而确定,这是与传统OO语言中的this指针最大的区别

//this指针
var People=function(name){
	this.name=name;
	this.sayHi=function(){
		return this.name+"say hi!";
	}
}
var tom=new People("tom");
var marry=new People("marry");
tom.sayHi();//sayHi的上下文为tom对象
marry.sayHi();//sayHi的上下文为marry对象

##new 操作符 javascript中的new 操作符不同于Java中的new 操作符,javascript中的new作用于函数

var sheriff=new Police("sheriff");
//相当于
var sheriff={};
Police.apply(sheriff,["sheriff"]);

##作用域 JavaScript 的函数是在局部作用域内运行的,在局部作用域内运行的函数体可以访问其外层的(可能是全局作用域)的变量和函数。JavaScript 的作用域为词法作用域,所谓词法作用域是说,其作用域为在定义时(词法分析时)就确定下来的,而并非在执行时确定。 ##JSON Javascript Object Notation,Javascript对象表示方法,即通过字面量来表示一个对象。 ##闭包 闭包允许你引用存在于外部函数中的变量。然而,它并不是使用该变量创建时的值,相反,它使用外部函数中该变量最后的值。

#函数式Javascript ##匿名函数 匿名函数就是没有名字的函数,定义时并不执行,只当代码块处理,只有在其后使用()时才会执行。

##柯里化 Currying是把接受多个参数的函数变换成接受一个单个参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。

//update会返回一个函数,这个函数可以设置id属性为item的web元素的内容
function update(item){
    return function(text){
       $("div#"+item).html(text);
    }
}
//Ajax请求,当成功是调用参数callback
function refresh(url, callback){
    var params = {
       type : "echo",
       data : ""
    };
    $.ajax({
       type:"post",
       url:url,
       cache:false,
       async:true,
       dataType:"json",
       data:params,
       //当异步请求成功时调用
       success: function(data, status){
           callback(data);
       },
       //当请求出现错误时调用
       error: function(err){
           alert("error : "+err);
       }
    });
}
refresh("action.html?target=requirement", update("requirementPanel"));
refresh("action.html?target=people", update("peoplePanel"));
refresh("action.html?target=notification", update("notificationPanel"));

##高阶函数 TODO #Javascript面向对象 TODO ##Javascript原型继承 TODO ##JS引用 TODO ##JS封装 TODO