zhixin's profileMYspace.comPhotosBlogLists Tools Help

Blog


    March 19

    JS的学习

    昨日看到网文《悟透javascript》作者不仅有着非凡的程序功力,知识也十分渊博。 他山之石,可以攻玉。特此留下纪念,以便今后可查询于此。
     
    function Person(name)   //带参数的构造函数
         {
             this.name = name;   //将参数值赋给给this对象的属性
             this.SayHello = function() {alert("Hello, I'm " + this.name);};   //给this对象定义一个SayHello方法。
         };

         function Employee(name, salary)     //子构造函数
         {
             Person.call(this, name);        //将this传给父构造函数
            this.salary = salary;       //设置一个this的salary属性
            this.ShowMeTheMoney = function() {alert(this.name + " $" + this.salary);};  //添加ShowMeTheMoney方法。
        };
       
        var BillGates = new Person("Bill Gates");   //用Person构造函数创建BillGates对象
        var SteveJobs = new Employee("Steve Jobs", 1234);   //用Empolyee构造函数创建SteveJobs对象

        BillGates.SayHello();   //显示:I'm Bill Gates
        SteveJobs.SayHello();   //显示:I'm Steve Jobs
        SteveJobs.ShowMeTheMoney();   //显示:Steve Jobs $1234

        alert(BillGates.constructor == Person);  //显示:true
        alert(SteveJobs.constructor == Employee);  //显示:true
       
        alert(BillGates.SayHello == SteveJobs.SayHello); //显示:false
        这段代码表明,函数不但可以当作构造函数,而且还可以带参数,还可以为对象添加成员和方法。其中的第9行,Employee构造函数又将自己接收的 this作为参数调用Person构造函数,这就是相当于调用基类的构造函数。第21、22行还表明这样一个意思:BillGates是由Person构造的,而SteveJobs是由Employee构造的。对象内置的constructor属性还指明了构造对象所用的具体函数