Javascript面向对象的特性
(总结自:http://www.cnblogs.com/zhangziqiu/archive/2009/05/26/jQuery-Learn-javascript.html ,在此仅作为学习笔记)
1、创建一个类
var obj = new Object(); //其中new可以省略
2、创建属性,不用声明直接赋值:
obj.property1 = "I'm property1.";
3、嵌套属性
var objectB = objectA;
objectB.other = objectA; //此时下面三个值相当, 并且改变其中任何一个值其余两个值都改变 objectA.name; objectB.name; objectB.other.name;
4、使用索引
//如果objectA上有一个属性名称为"school.college", 那么我们没法通过"."访问,因为"objectA.school.college"语句是指寻找objectA的school属性对象的college属性. //这种情况我们需要通过索引设置和访问属性: objectA["school.college"] = "BITI"; alert(objectA["school.college"]); //下面几个语句是等效的: objectA["school.college"] = "BITI"; var key = "school.college" alert(objectA["school.college"]); alert(objectA["school" + "." + "college"]); alert(objectA[key]);
5、JSON 格式语法
//JSON var objectA = { name: "myName", age: 19, school: { college: "大学", "high school": "高中" }, love:["编程","唱歌","游玩"] }
可用objectA.school["high school"];objectA.school.college;objectA.like[1]; 等来访问。。。
6、静态方法与实例方法
function theStaticClass() { }; //声明一个类 theStaticClass.staticMethod = function() { alert("static method") }; //创建一个静态方法 theStaticClass.prototype.instanceMethod = function() { "instance method" }; //创建一个实例方法
对于静态方法可以直接调用:
staticClass.staticMethod();
但是动态方法不能直接调用:
staticClass.instanceMethod(); //语句错误, 无法运行.
需要首先实例化后才能调用:
var instance = new staticClass();//首先实例化
instance.instanceMethod(); //在实例上可以调用实例方法
7、全局对象window属性
在页面中创建的类
<script type="text/javascript">
var objectA = new Object();
</script>
是个全局变量。实际上全局变量objectA是创建在window对象上,所以可以用window.objectA来引用。
8、函数的实现
function myMethod() { alert("Hello!"); } window.myMethod = function() { alert("Hello!"); } myMethod = function() { alert("Hello!"); }
9、"this"可以指全局的window,也可以指当前变量或类
var o1 = { name: "o1 name" }; window.name = "window name"; function showName() { alert(this.name); } o1.show = showName; window.show = showName; showName();//得到window name o1.show();//得到o1 name window.show();//得到window name
10、javascript中的闭包
简单表达:
闭包就是function实例以及执行function实例时来自环境的变量.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div id="divResult"></div>
<script type="text/javascript">
function start()
{
var count = 0;
window.setInterval(function()
{
document.getElementById("divResult").innerHTML += count + "<br/>";
count++;
}, 3000);
};
start();
</script>
</body>
</html>
结果是:
0
1
2
3
……
因为count变量是setInterval中创建的匿名函数(就是包含count++的函数)的闭包的一部分!