刚刚接触JavaScript不久,一开始认为它不过是个简单的脚本语言而已,但是在平常或多或少的接触中,对于this指针、全局和局部变量等理解的都不深刻,所以找了些资料看看。
一、类 和实例(对象)
1、类的创建
- function class1(){
- //类成员的定义及构造函数
- }
2、实例的创建
1)用 obj1=new class1();来获得obj1对象
2)用{ }来创建无类型对象
- var obj={}; //定义了一个空对象 ,等价于var obj= new Object();
- var user={
- name:"jack",
- favoriteColor:["red","green"],
- hello:function(){ //定义了hello方法
- alert("hello,"+this.name)
- }
- }
- user.hello(); //调用user对象的方法hello
3、函数对象
1)函数的使用方法
- function func1(...){...};
- var func2=function(...){...};
- var func3=function func4(...){...};
- var func5=new Function();
可以用function关键字定义一个函数,并为每个函数指定一个函数名,通过函数名进行调用。在JavaScript解释执行时,函数都是被维护为一个对象,就是函数对象(Function Object)
下面两段代码都是创建一个函数myFunction:
- function myFunction(a,b){
- return a+b;
- }
- //等价于
- var myFunction =new Function("a","b","return a+b");
3)函数对象和其他内部对象的关系
内部对象:
- alert(typeof(Array)); //function,表示一个类
- alert(typeof(Object)); //function
- alert(typeof(Date)); //function
- alert(typeof(new Array())); //object,返回一个对象
- alert(typeof(new Object())); //object
- alert(typeof(new Date())); //object
- alert(typeof(Function)); //function
- alert(typeof(foo)); //function
- alert(typeof(foo())); //object
- alert(typeof(new Function())); //function
4.深入认识this指针
JavaScript中的this指针式一个动态变化的变量,它表明了当前运行该函数的对象。一个对象就是由一个或多个属性(方法)组合成的集合。每个集合元素不是仅能属于一个集合,而是可以动态属于多个集合。这样,一个方法(集合元素)由谁调用,this指针就指向谁。
由于对象属性(方法)的动态变化特性,一个对象的两个属性(方法)之间的相互引用,必须通过this指针
- var namespace1=new Object();
- namespace1.class1=function(){
- //初始化对象的代码
- }
- var obj1=new namespace1.class1();
- obj1.getP=function(){
- alert(this.p); //表面上this指针指向的是object1
- }
5、类的实现机制
- // 构造函数
- function Person(name, sex) {
- this.name = name;
- this.sex = sex;
- }
- // 定义Person的原型,原型中的属性可以被自定义对象引用
- Person.prototype = {
- getName: function() {
- return this.name;
- },
- getSex: function() {
- return this.sex;
- }
- }
当代码var zhang = new Person("ZhangSan", "man")执行时,其实内部做了如下几件事情:
- 创建一个空白对象(new Object())。
- 拷贝Person.prototype中的属性(键值对)到这个空对象中(我们前面提到,内部实现时不是拷贝而是一个隐藏的链接)。
- 将这个对象通过this关键字传递到构造函数中并执行构造函数。
- 将这个对象赋值给变量zhang。