JavaScript面向对象原理
2016年1月28日
1 目标:实现封装、继承、多态等面向对象的基本功能。
2 原理:使用prototype、function 、new、this模拟面向对象的类
JavaScript是面向对象语言,但不使用类(根本不存在类)。JavaScript的面向对象是基于prototype和function的,而不是基于类的。
参考:http://www.w3school.com.cn/js/js_objects.asp
http://www.2cto.com/kf/201409/339520.html
2.1 封装:将属性和方法封闭在内部。这里使用function作为基础封装。
function声明一个特殊对象,可以识别()直接运行(常规函数),也可以识别new创建一个对象(具有类的功能,构造函数)。
JavaScript内部有两上基本的function:Object和Function。
使用new Object()将生成一个新的对象实例,而使用new Function()将生成一个新的function对象。
权限控制:使用闭包(closure)模拟public,private(没有protected等)。一般情况下闭包的作用是指定访问权限,因此只需要将闭包设定为匿名函数,返回内部function对象。
2.1.1闭包:意指封闭的作用域,在此作用域中可以操作,外部无法操作。因此可以在此作用域中定义private变量,外部无法操作(与java的类相反,java在内部定义private变量)。
参考:http://www.cnblogs.com/starweb/archive/2013/02/17/2914023.html
闭包使用的外部作用域中变量由于被闭包对象使用,将不能被回收。
一般使用嵌套定义的函数来定义闭包对象。外部函数封装一个封闭的作用域(实际上如果不使用匿名函数,也可以开放一些接口),返回内部对象。
//closure
var M=(function(){
var a=2;//private
var b=3;//private
var sum={};
sum.add=function(){//public
return a+b;
};
return sum;
})();