JavaScript 类、对象、this指针浅析


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

一、类 和实例(对象)

1、类的创建

function class1(){
  //类成员的定义及构造函数
}
   这里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();
2)认识函数对象

 可以用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
区别:new一个Function实际上返回的是一个函数,这与其他对象有很大的不同。尽管函数本身也是一个对象,但它与普通的对象还是很有区别的,因为它同时也是一个对象构造器,也就是说,可以new一个函数来返回一个对象。所有typeof返回“function”的对象都是函数对象,也称这样的对象为构造器(constructor)。因而,所有的构造器都是对象,但不是所有的对象都是构造器。Function是所有函数对象的基础,而Object是所有对象(包括函数对象)的基础。


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
}
这里的this关键字是不能省略的,即不能写成alert(p)的形式,这将使得getP函数去引用上下文环境中的p变量,而不是obj1的属性。


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。









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值