JavaScript 类、对象、this指针浅析

刚刚接触JavaScript不久,一开始认为它不过是个简单的脚本语言而已,但是在平常或多或少的接触中,对于this指针、全局和局部变量等理解的都不深刻,所以找了些资料看看。

一、类 和实例(对象)

1、类的创建

[javascript] view plain copy
  1. function class1(){  
  2.   //类成员的定义及构造函数  
  3. }  

这里class1既是一个函数也是一个类。可以将它理解为类的构造函数,负责初始化工作。


2、实例的创建

1)用 obj1=new class1();来获得obj1对象。

2)用{ }来创建无类型对象 。           

  

[javascript] view plain copy
  1. var obj={};                         //定义了一个空对象 ,等价于var obj= new Object();  
  2. var user={  
  3.      name:"jack",  
  4.      favoriteColor:["red","green"],  
  5.      hello:function(){              //定义了hello方法
  6.               alert("hello,"+this.name)     
  7.      }  
  8. }  
  9.   
  10. user.hello();                        //调用user对象的方法hello  

3、函数对象

1)函数的使用方法

[javascript] view plain copy
  1. function func1(...){...};  
  2. var func2=function(...){...};  
  3. var func3=function func4(...){...};  
  4. var func5=new Function();  
2)认识函数对象

 可以用function关键字定义一个函数,并为每个函数指定一个函数名,通过函数名进行调用。在JavaScript解释执行时,函数都是被维护为一个对象,就是函数对象(Function Object)。

下面两段代码都是创建一个函数myFunction:

[javascript] view plain copy
  1. function myFunction(a,b){  
  2.         return a+b;  
  3. }  
  4. //等价于  
  5. var myFunction =new Function("a","b","return a+b");  

3)函数对象和其他内部对象的关系

内部对象:

[javascript] view plain copy
  1. alert(typeof(Array));     //function,表示一个类。 
  2. alert(typeof(Object));   //function  
  3. alert(typeof(Date));     //function  
  4. alert(typeof(new Array()));    //object,返回一个对象。 
  5. alert(typeof(new Object()));  //object  
  6. alert(typeof(new  Date()));   //object  
函数:
[javascript] view plain copy
  1. alert(typeof(Function));         //function  
  2. alert(typeof(foo));              //function  
  3. alert(typeof(foo()));            //object  
  4. alert(typeof(new Function()));   //function  
区别: new一个Function实际上返回的是一个函数,这与其他对象有很大的不同。尽管函数本身也是一个对象,但它与普通的对象还是很有区别的,因为它同时也是一个对象构造器,也就是说,可以new一个函数来返回一个对象。所有typeof返回“function”的对象都是函数对象,也称这样的对象为构造器(constructor)。因而,所有的构造器都是对象,但不是所有的对象都是构造器。Function是所有函数对象的基础,而Object是所有对象(包括函数对象)的基础。


4.深入认识this指针

JavaScript中的this指针式一个动态变化的变量,它表明了当前运行该函数的对象。一个对象就是由一个或多个属性(方法)组合成的集合。每个集合元素不是仅能属于一个集合,而是可以动态属于多个集合。这样,一个方法(集合元素)由谁调用,this指针就指向谁。

由于对象属性(方法)的动态变化特性,一个对象的两个属性(方法)之间的相互引用,必须通过this指针。

  1. var namespace1=new Object();  
  2. namespace1.class1=function(){  
  3.     //初始化对象的代码  
  4. }  
  5. var obj1=new namespace1.class1();  
  6. obj1.getP=function(){  
  7.      alert(this.p);   //表面上this指针指向的是object1  
  8. }  
这里的this关键字是不能省略的,即不能写成alert(p)的形式,这将使得getP函数去引用上下文环境中的p变量,而不是obj1的属性。


5、类的实现机制

[javascript] view plain copy
  1. // 构造函数  
  2.    function Person(name, sex) {  
  3.        this.name = name;  
  4.        this.sex = sex;  
  5.    }  
  6.    // 定义Person的原型,原型中的属性可以被自定义对象引用
  7.    Person.prototype = {  
  8.        getName: function() {  
  9.            return this.name;  
  10.        },  
  11.        getSex: function() {  
  12.            return this.sex;  
  13.        }  
  14.    }  

当代码var zhang = new Person("ZhangSan", "man")执行时,其实内部做了如下几件事情:

  • 创建一个空白对象(new Object())。
  • 拷贝Person.prototype中的属性(键值对)到这个空对象中(我们前面提到,内部实现时不是拷贝而是一个隐藏的链接)。
  • 将这个对象通过this关键字传递到构造函数中并执行构造函数。
  • 将这个对象赋值给变量zhang。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值